Question

Je crée une interface Web qui lit actuellement les données d'un fichier de données XML, les analyse dans un tableau d'objets, après quoi je les lie à la source de données d'un Gridview. J'utilise ensuite et pour récupérer les données que je veux des objets de chaque colonne.

Cependant, je suis sur le point de vouloir avoir plusieurs onglets dans cette grille, éventuellement contrôlés par différents boutons de liens. Chaque onglet afficherait un ensemble de colonnes différent.

Quel serait le meilleur moyen de mettre cela en œuvre? Dois-je avoir trois vues de grille distinctes dans ma page et ne montrer que celle pour laquelle l'utilisateur a sélectionné (en cliquant sur le bouton du lien) tout en masquant toutes les autres? Cela semblait être peut-être inutilement lent. Est-il possible de le faire via un seul GridView?

À l'heure actuelle, l'intégralité de GridView est contenue dans un panneau de mise à jour AJAX, avec le code ci-dessous:

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

Il s’agit du code que j’ai actuellement pour un gridview, avec le contenu d’un onglet. En fonction de la réponse de jdk, comment puis-je ajouter d'autres TemplateFields pour les deuxième et troisième onglets, puis basculer entre l'affichage des différents ensembles lorsqu'un bouton de lien d'onglet est cliqué?

Merci!

Était-ce utile?

La solution

La chaîne ViewState de la page peut devenir très volumineuse (inutilement) lorsque plusieurs vues GridViews sont présentes (affichez le code source HTML résultant et recherchez "__ VIEWSTATE" pour le voir). Vous pouvez utiliser un contrôle GridView, comme vous l'avez dit, et y échanger les données appropriées en fonction du lien sur lequel LinkButton (on.k.a. a récemment été cliqué).

S'il s'agit également d'un scénario de données paginées, vous pouvez stocker dans ViewState un simple tableau de trois entiers représentant le numéro de page actuel de chacun des trois ensembles de données, afin de pouvoir afficher la page de données la plus récente lors de leur permutation. dans et hors du contrôle DataGrid.

Toutefois, si la bande passante n’est pas un problème (par exemple, si la page ne reçoit pas beaucoup de résultats ou ne fonctionne pas sur un intranet), ne vous inquiétez pas autant de l’optimiser.

Autres conseils

J'ai déjà fait des choses semblables. J'ai utilisé des colonnes de modèle pour le GridView. Et placez un contrôle d'onglet du kit d'outils de contrôle Ajax dans GridView.

Je créerais probablement un contrôle composite personnalisé (en tant que conteneur à onglets) et y ajouterais la vue en grille. Je ne voudrais pas le regrouper en un.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top