Pergunta

Estou criando uma interface web que atualmente lê os dados a partir de um arquivo de dados XML, analisa-lo em um array de objetos, após o qual eu vinculá-lo à fonte de dados de um GridView. Eu, então, usar e para recuperar os dados que eu quero de objetos para cada coluna.

No entanto, eu estou no ponto que eu gostaria de ter várias abas nesta gridview, possivelmente controlado por diferentes botões de link. Cada guia iria mostrar um conjunto diferente de colunas.

Qual seria a melhor maneira de implementar isso? Preciso ter três GridViews separadas em minha página, e apenas mostrar aquele para o qual o usuário selecionado (baseado no clique do botão link), enquanto esconde todos os outros? Este parecia que poderia ser desnecessariamente lento. É possível fazer através de um GridView?

Agora todo o GridView está contido em um painel de atualização AJAX, com o código abaixo:

<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>

Este é o código que eu tenho atualmente para um gridview, com o conteúdo de um guia. Com base na resposta do jdk, como eu iria sobre a adição de outros TemplateFields para o segundo e terceiro guias, e depois alternar entre exibir os diferentes conjuntos quando um botão de link guia é clicado?

Obrigado!

Foi útil?

Solução

A seqüência de página ViewState pode se tornar muito (desnecessariamente) grande quando vários GridViews estão presentes (ver seu código fonte HTML resultante e procure por "__VIEWSTATE" para vê-lo). Você pode usar um controle GridView, como você disse, e trocar dados apropriados para ele, dependendo de qual LinkButton ( "tab" A.K.A.) foi recentemente clicado.

Se este é também um cenário de dados paginado, você pode armazenar uma matriz simples de três inteiros em ViewState representando o número da página atual de cada um dos três conjuntos de dados, para que você pode exibir a página mais recente de dados quando trocando-os dentro e fora de um controle DataGrid.

No entanto, se a largura de banda não é uma preocupação (ou seja, se a página não receber um grande número de acessos ou corridas em uma Intranet) então não se preocupe muito sobre como otimizá-lo.

Outras dicas

Já fiz coisas semelhantes antes. Eu usei colunas de modelo para o GridView. E colocar um Ajax Control Toolkit controle guia no GridView.

eu provavelmente criar um controle composto personalizado (como o abas-container) e adicionar a grade-view para isso. Eu não empacotá-lo em um.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top