0

J'ai une grille de données dans laquelle chaque ligne contient des informations sur les employés d'une entreprise. Je voudrais autoriser chaque rangée à afficher/masquer des informations supplémentaires. Ma première idée était d'utiliser la CollapsiblePanelExtender de la boîte à outils AJAX et ont chaque ligne comme celui-ci:ASP.NET Afficher/Masquer les sections dans une ligne Datagrid

<ajaxtoolkit:collapsiblepanelextender 
    TargetControlID="panel2"> 
    ExpandControlID="LinkButton1" 
    CollapseControlID="LinkButton1"> 
</ajaxtoolkit:collapsiblepanelextender> 

<asp:panel> 
    FirstName | LastName | Phone | Email 
    <LinkButton1> <- this hides/show extra info in panel2 
</asp:panel> 

<asp:panel2> 
    <textbox ="FirstName"> 
    <textbox ="LastName"> 
    <textbox ="EmailName"> 
    ... 
    ...lots of textboxes where information is assigned from the database. 
</asp:panel2> 

Cela fonctionne très bien, mais il peut être coûteux informatiquement. Le panneau d'information supplémentaire contient beaucoup de zones de texte/étiquettes, dont toutes les valeurs proviennent de la base de données. Chaque fois que la page charge toutes les données de la base de données, une partie est cachée.

Existe-t-il un meilleur moyen d'atteindre mon objectif? Ou y a-t-il un moyen de ne charger que les détails supplémentaires des employés lorsque le bouton Afficher/Masquer est cliqué?

Merci d'avance!

Répondre

1

J'ai fait quelque chose comme ça mais avec un ModalPopupExtender. J'avais un panneau avec des zones de texte et des étiquettes, qui récupèrent des informations seulement quand l'utilisateur appuie sur un bouton d'image. Dans cet exemple, l'imagebutton était dans un GridViewRow, et la clé pour récupérer des données était dans les propriétés DataKeys de la Row.

GridViewRow row = ((GridViewRow)((ImageButton)sender).NamingContainer); 
//NamingContainer return the container that the control sits in 
DataKey key = ((GridView)row.NamingContainer).DataKeys[row.RowIndex]; 

//Retrieve data with a server method. It can be with wathever you want, I use an ArrayList 
ArrayList AL=Domain.GetCustomerData(key[0].ToString()); 

//Fill controls with data, 
LblDate.Text = AL[0].ToString(); 
dLectHidro.Value = AL[1].ToString(); 
idLectHL.Value = AL[2].ToString(); 
LblEstacion.Text = HttpUtility.HtmlDecode(AL[3].ToString()); 
TxtLluvia.Text = HttpUtility.HtmlDecode(AL[4].ToString()); 
TxtLluvia1.Text = HttpUtility.HtmlDecode(AL[5].ToString()); 

//Show the popup 
this.ModalPopupModif.Show(); 

Espérons que cela aide. Claudia

+0

Merci Claudia, Votre façon est un moyen plus facile et propably mieux d'atteindre l'objectif. Mais j'espérais permettre l'édition/visualisation en place sans popups, etc. J'ai utilisé votre modèle pour afficher/masquer un panneau dans chaque rangée, cela fonctionne mais est très maladroit. Est-ce que quelqu'un d'autre a eu une meilleure idée ou est-ce que je ferais mieux de descendre la route du Modal Popup? –

+0

En fin de compte, je suis allé avec le ModalPopupExtender, c'est beaucoup plus facile et vous avez plus de contrôle dessus. Merci Claudia de le suggérer. –

+0

Vous êtes les bienvenus. Heureux d'aider. – Claudia

Questions connexes