Создание вкладок Gridview в C # - PullRequest
0 голосов
/ 22 октября 2009

Я создаю веб-интерфейс, который в настоящее время считывает данные из файла данных 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>

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

Спасибо!

Ответы [ 3 ]

1 голос
/ 22 октября 2009

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

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

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

0 голосов
/ 22 октября 2009

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

0 голосов
/ 22 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...