Pregunta

Estoy creando una interfaz web que actualmente lee datos de un archivo de datos XML, los analiza en una matriz de Objetos, después de lo cual los vinculo a la fuente de datos de Gridview. Luego uso y para recuperar los datos que quiero de los objetos para cada columna.

Sin embargo, estoy en el punto en que me gustaría tener varias pestañas en esta vista de cuadrícula, posiblemente controladas por diferentes botones de enlace. Cada pestaña mostrará un conjunto diferente de columnas.

¿Cuál sería la mejor manera de implementar esto? ¿Debo tener tres GridViews separados en mi página y solo mostrar el que el usuario seleccionó (basado en el clic en el botón de enlace), mientras oculto todos los demás? Esto parecía que podría ser innecesariamente lento. ¿Es posible hacerlo a través de un GridView?

En este momento, todo el GridView está contenido en un panel de actualización AJAX, con el siguiente código:

<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 es el código que tengo actualmente para una vista de cuadrícula, con el contenido de una pestaña. En función de la respuesta de jdk, ¿cómo puedo agregar otros TemplateFields para la segunda y tercera pestaña y luego cambiar entre mostrar los diferentes conjuntos cuando se hace clic en un botón de enlace de pestaña?

¡Gracias!

¿Fue útil?

Solución

La cadena ViewState de la página puede volverse muy (innecesariamente) grande cuando están presentes múltiples GridViews (vea el código fuente HTML resultante y busque " __ VIEWSTATE " para verlo). Puedes usar un control GridView, como dijiste, e intercambiar datos apropiados en función de qué LinkButton (a.k.a. " pestaña ") se hizo clic recientemente.

Si este también es un escenario de datos paginados, puede almacenar una matriz simple de tres enteros en ViewState que representa el número de página actual de cada uno de los tres conjuntos de datos, de modo que puede mostrar la página de datos más reciente al intercambiarlos dentro y fuera del control de DataGrid.

Sin embargo, si el ancho de banda no es una preocupación (es decir, si la página no recibe muchas visitas o se ejecuta en una Intranet), entonces no se preocupe tanto por optimizarla.

Otros consejos

He hecho cosas similares antes. Usé columnas de plantilla para GridView. Y ponga un control de pestañas del kit de herramientas de control Ajax en el GridView.

Probablemente crearía un control compuesto personalizado (como el contenedor de pestañas) y agregaría la vista de cuadrícula a eso. No lo agruparía en uno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top