Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Bianca

les bons tuyaux !
toute la lumière sur...comment implémenter la sélection d'une ligne d'une GridView dans une webform comme dans une winform ?

Par défaut, la sélection d'une ligne dans un contrôle serveur web ASP.NET 2.0 de type GridView se fait au travers d'une colonne spécifique de type CommandField, ce qui donne à l'affichage une colonne avec un lien hypertexte Sélectionner (cf. grille du haut dans la Figure 1).

Comment faire pour gérer la sélection de manière plus classique comme dans une grille d'une winform, simplement en cliquant n'importe où avec la souris sur la ligne (cf. grille du bas dans la Figure 1) ?

Sélection dans une  GridView

                                               - Figure 1 -

Voici le source de la page avec une grille implémentant une colonne "Sélectionner" de type CommandField :

<asp:SqlDataSource ID="dsAnnonces" runat="server" ConnectionString="<%$ ConnectionStrings:csAffairesSansRisque %>" SelectCommand="SELECT [Ann_Telephone], [Ann_Email], [Ann_Prix], [Ann_CodePostal] FROM [Annonces]"> </asp:SqlDataSource> <asp:GridView ID="gvAnnonces" runat="server" AutoGenerateColumns="False" DataSourceID="dsAnnonces"> <SelectedRowStyle BackColor="Blue" ForeColor="white" /> <Columns> <asp:CommandField ShowSelectButton="True" /> <asp:BoundField DataField="Ann_Email" HeaderText="email" SortExpression="Ann_Email" /> <asp:BoundField DataField="Ann_Prix" HeaderText="Montant" SortExpression="Ann_Prix" /> <asp:BoundField DataField="Ann_Telephone" HeaderText="T&#233;l" SortExpression="Ann_Telephone"/> </Columns> </asp:GridView>
Le principe consiste à :
  • remplacer les colonnes standards de type BoundField par des colonnes de type ButtonField. L'intérêt du type de colonne ButtonField est que son rendu en html dans la page de réponse renvoyée au navigateur est un lien hypertexte. D'où la sélection de la ligne simplement en cliquant sur une colonne avec la souris !
  • Attention, il faut également remplacer l'attribut DataField qui définit la liaison de données avec le contrôle de source de données de type SqlDataSource, par l'attribut équivalent nommé DataTextField.
  • pour terminer il faut ajouter sur chaque colonne l'attribut CommandName avec la valeur Select pour associer l'action de sélection équivalente à la colonne de type CommandField que vous aviez par défaut, c'est-à-dire pour exécuter l'ordre de sélection sur la ligne.

<asp:SqlDataSource ID="dsAnnonces" runat="server" ConnectionString="<%$ ConnectionStrings:csAffairesSansRisque %>" SelectCommand="SELECT [Ann_Telephone], [Ann_Email], [Ann_Prix], [Ann_CodePostal] FROM [Annonces]"> </asp:SqlDataSource> <asp:GridView ID="gvAnnonces" runat="server" AutoGenerateColumns="False" DataSourceID="dsAnnonces"> <SelectedRowStyle BackColor="Blue" ForeColor="white" /> <Columns> <asp:ButtonField DataTextField ="Ann_Email" CommandName="Select" HeaderText="email" SortExpression="Ann_Email" /> <asp:ButtonField DataTextField="Ann_Prix" CommandName="Select" HeaderText="Montant" SortExpression="Ann_Prix" /> <asp:ButtonField DataTextField="Ann_Telephone" CommandName="Select" HeaderText="T&#233;l" SortExpression="Ann_Telephone"/> </Columns> </asp:GridView>

Pour aller plus loin...
Etant donné qu'une colonne a pour rendu un lien hypertexte, vous vous retrouvez avec un style d'affichage pas terrible. En créant une règle d'affichage dans une feuille de style comme ci-dessous, vous pouvez vous débarrasser du soulignement usuel des liens hypertextes :

a, a:link, a:visited, a:active, a:hover { text-decoration:none; }

De la même manière, est-ce que vous avez remarqué que si l'utilisateur clique entre deux colonnes ou en dehors du texte de la ligne, la sélection ne se déclenche pas. Cela vient du fait que le lien hypertexte prend par défaut la dimension du texte associé. Pour étendre le lien hypertexte à la largeur complète d'une colonne, il suffit d'ajouter les deux propriétés suivantes à la règle d'affichage précédente :

a, a:link, a:visited, a:active, a:hover { text-decoration:none; display:block; width:100%; }

Et le tour est joué !

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: lundi 18 décembre 2006 18:42 par bianca
Classé sous : ,

Commentaires

cyril a dit :

Mouais, c'est sympa mais je trouve pas ça très propre...

J'avais fait un extender qui permettait justement de rendre la ligne (le tr) vraiment selectable. Ainsi on n'avais absolument rien à modifier dans le code, il est prévu que j'écrive un article sur cet extender ...

Ca reste malgré tous sympa car c'est très simple à mettre en place :-)

# décembre 18, 2006 21:06

Simon a dit :

Pareil... le concept de l'extender me plait plus... le fait de modifier la structure html me parait super bof. Par contre effectivement, c'est à se demander pourquoi ce n'est pas fait de base. Un autre avantage de l'extender c'est que si tu as des colones d'action tu ne perds pas les actions propres à la colone, et en même temps la zone vide te permet de sélectionner la ligne... Encore une idée de plus à approfondir :-)

# décembre 18, 2006 22:55
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Et je mets le son.... par Pierrick's Blog le il y a 30 minutes

- SharePoint : Comment interdire l’accès à un utilisateur pour tous les sites d’une Web Application par Blog Technique de Romelard Fabrice le il y a 17 heures et 34 minutes

- VPC - Reset de la position de la console par Blog technique de Nicolas Boonaert le il y a 20 heures et 10 minutes

- Un bug dans IE rendra cette page… non-imprimable ! par Le blog de FremyCompany le il y a 21 heures et 6 minutes

- Quelques retours sur Google Protocol Buffers par Julien Chable le 07-18-2008, 11:10

- SharePoint et le multilinguisme : Comment gérer la traduction des propriétés dans les toolbars des WebParts par The Mit's Blog le 07-18-2008, 10:53

- [Open XML] Les liens de la semaine 14/07/2008 par Julien Chable le 07-18-2008, 10:29

- Une nouvelle version des TFS Power tools est disponible par Michel Perfetti [Miiitch] le 07-18-2008, 09:37

- EF et le testeur fou par Matthieu MEZIL le 07-18-2008, 07:34

- VPC SharePoint/WSS clonable par Le blog technique de Loïc Bar le 07-17-2008, 16:32