Domanda

Sto creando un'interfaccia web che attualmente legge i dati da un file di dati XML, li analizza in una matrice di oggetti, dopo di che li associo all'origine dati di Gridview. Quindi uso e per recuperare i dati che desidero dagli oggetti per ogni colonna.

Tuttavia, sono al punto che vorrei avere più schede in questa visualizzazione griglia, possibilmente controllata da diversi pulsanti di collegamento. Ogni scheda mostrerebbe un diverso set di colonne.

Quale sarebbe il modo migliore per implementarlo? Devo avere tre GridView separate nella mia pagina e mostrare solo quella per la quale l'utente ha selezionato (in base al clic sul pulsante di collegamento), nascondendo tutte le altre? Sembrava che potrebbe essere inutilmente lento. È possibile farlo tramite un GridView?

Al momento l'intero GridView è contenuto in un pannello di aggiornamento AJAX, con il codice seguente:

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

Questo è il codice che ho attualmente per un gridview, con il contenuto di una scheda. In base alla risposta di jdk, come potrei fare per aggiungere altri TemplateField per la seconda e la terza scheda, e quindi passare dalla visualizzazione dei diversi set quando si fa clic su un pulsante di collegamento alla scheda?

Grazie!

È stato utile?

Soluzione

La stringa ViewState della pagina può diventare molto (inutilmente) grande quando sono presenti più GridView (visualizza il codice sorgente HTML risultante e cerca " __ VIEWSTATE " per vederlo). Puoi usare un controllo GridView, come hai detto, e scambiarvi i dati appropriati a seconda di quale LinkButton (a.k.a. & tab; tab ") è stato recentemente cliccato.

Se si tratta anche di uno scenario di dati impaginati, è possibile archiviare un semplice array di tre numeri interi in ViewState che rappresenta il numero di pagina corrente di ciascuno dei tre set di dati, in modo da poter visualizzare la pagina di dati più recente durante lo scambio dentro e fuori dall'unico controllo DataGrid.

Tuttavia, se la larghezza di banda non è un problema (ovvero se la pagina non riceve molti hit o corre su una Intranet), non preoccuparti tanto di ottimizzarla.

Altri suggerimenti

Ho già fatto cose simili prima. Ho usato le colonne modello per GridView. E inserisci un controllo della scheda del toolkit di controllo Ajax in GridView.

Probabilmente vorrei creare un controllo composito personalizzato (come contenitore a schede) e aggiungere la vista griglia a quello. Non lo raggrupperei in uno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top