Вопрос

Я создаю веб-интерфейс, который в данный момент считывает данные из XML-файла данных, преобразует их в массив объектов, после чего я привязываю их к источнику данных Gridview.Затем я использую и для извлечения нужных мне данных из объектов для каждого столбца.

Тем не менее, я нахожусь на том этапе, когда я хотел бы иметь несколько вкладок в этом gridview, возможно, управляемых разными кнопками ссылок.На каждой вкладке будет отображаться свой набор столбцов.

Каков был бы наилучший способ реализовать это?Нужно ли мне иметь три отдельных вида сетки на моей странице и просто показывать тот, для которого пользователь выбрал (на основе нажатия на кнопку ссылки), скрывая при этом все остальные?Казалось, что это может быть излишне медленно.Можно ли это сделать через один GridView?

Прямо сейчас весь GridView содержится на панели обновления AJAX с приведенным ниже кодом:

<asp:Panel id="searchResultsGrid" runat="server" CssClass="searchResultsGrid">
    <asp:GridView id="gridViewSearchResults" runat="server" AutoGenerateColumns="false" 
                    AllowPaging="True" AllowSorting="True" 
                    PageSize="25" Width="920" PagerSettings-Visible="false">
    <Columns>
        <asp:templatefield headertext="Test Column 1 Tab 1" HeaderStyle-HorizontalAlign="Left">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>
        <asp:templatefield headertext="Test Column 2 Tab 1" HeaderStyle-HorizontalAlign="Left">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>
        <asp:templatefield headertext="Test Column 3 Tab 1" HeaderStyle-HorizontalAlign="Left">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>
        <asp:templatefield headertext="Test Column 4 Tab 1" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>
        <asp:templatefield headertext="Test Column 5 Tab 1" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>
        <asp:templatefield headertext="Test Column 6 Tab 1" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>
        <asp:templatefield headertext="Test Column 7 Tab 1" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>                                                                                                    
    </Columns>
    <RowStyle CssClass="searchResultEntry borderTopGrey" />         
    <EmptyDataTemplate>
        <p class="searchResultsEmpty">
            <asp:Label ID="lblSearchResultsEmpty" runat="server" Text="No records matched the selected criteria.  Please revise your criteria and try again." CssClass="searchResultsEmpty"></asp:Label>
        </p>
    </EmptyDataTemplate>                
    </asp:GridView>
</asp:Panel>

Это код, который у меня сейчас есть для одного gridview с содержимым одной вкладки.Основываясь на ответе jdk, как бы мне добавить другие поля шаблонов для второй и третьей вкладок, а затем переключаться между отображением разных наборов при нажатии кнопки ссылки на вкладку?

Спасибо!

Это было полезно?

Решение

Строка ViewState страницы может стать очень (излишне) большой при наличии нескольких просмотров сетки (просмотрите ее результирующий исходный HTML-код и выполните поиск "__VIEWSTATE", чтобы увидеть его).Вы можете использовать один элемент управления GridView, как вы сказали, и поменять местами соответствующие данные в нем в зависимости от того, какая кнопка LinkButton (она же"вкладка") была недавно нажата.

Если это также сценарий с разбитыми на страницы данными, вы можете сохранить простой массив из трех целых чисел в ViewState, представляющий текущий номер страницы каждого из трех наборов данных, чтобы вы могли отображать самую последнюю страницу данных при замене их в элементе управления one DataGrid и из него.

Однако, если пропускная способность не вызывает беспокойства (т.е.если страница не получает большого количества просмотров или запускается в Интрасети), то не стоит так сильно беспокоиться о ее оптимизации.

Другие советы

Я уже делал подобные вещи раньше.Я использовал столбцы шаблона для GridView.И поставить Элемент управления вкладкой Ajax control toolkit в режиме просмотра сетки.

Вероятно, я бы создал пользовательский составной элемент управления (в виде контейнера с вкладками) и добавил бы к нему представление сетки.Я бы не стал объединять это в одно целое.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top