[Résolu] [C# .net] Récupérer des valeurs dans un GridView

Récupérer des valeurs dans un GridView [Résolu] [C# .net] - C#/.NET managed - Programmation

Marsh Posté le 25-07-2006 à 23:31:56    

Bonjour à tous :)
 
J'ai un gridView qui contient des BoundField comme ceci :  

Code :
  1. <asp:GridView ID="myGridView" ...>
  2.   <Columns>
  3.     <asp:BoundField HeaderText="Col 1" DataField="pseudo" />
  4.     <asp:BoundField HeaderText="Col 2" DataField="password" />

Une fois le gridView affiché sur la page Web, je voudrais récupérer les valeurs de "pseudo" et "password", ligne par ligne.  
Le DataSource du gridView n'est plus utilisable.  
 
Ce que je pensais faire, c'est qqch comme cela :  

Code :
  1. for (int i = 0; i < myGridView.Rows.Count; i++) {
  2.   string pseudo = myGridView.Rows[i].Cells[0].Text;
  3.   string password = myGridView.Rows[i].Cells[1].Text;
  4. }

Seulement, Cells[0] et Cells[1] sont codées en dur, et je ne veux pas.  
N'y a t-il pas un moyen de récupérer le bon BoundField d'une autre façon ? (sans utiliser les ItemTemplate et faire des FindControl()).  
Merci bien pour votre aide :)


Message édité par Roodie le 01-08-2006 à 14:26:48
Reply

Marsh Posté le 25-07-2006 à 23:31:56   

Reply

Marsh Posté le 26-07-2006 à 04:19:33    

Si je me souviens bien, ça doit être de la manière suivante (du moins ça l'est pour un DataGrid) :
((ton_type_asp.net_object)ton_gridview.Items[indice_tableau].FindControl("ton_controle" )).propriete_a_checker;
 
Exemple :  
 

Code :
  1. //Pour récupérer un label d'une ligne
  2. ((Label)myGridView.Items[idx].FindControl("myLabel" )).Text


 

Code :
  1. //Pour récupérer le résultat d'une checkbox
  2. ((CheckBox)myGridView.Items[idx].FindControl("myCheckBox" )).Checked;

Reply

Marsh Posté le 26-07-2006 à 09:46:01    

Bonjour Benwoua,
 
Bin en fait, j'ai bien précisé que je n'ai pas de controls comme des textboxes, labels... donc je n'ai pas d'ID... donc je ne peux pas utiliser FindControl().  
Mais ton code marche, bien sûr. Merci si vous avez une idée pour récupérer les textes dans des BoundFields :)

Reply

Marsh Posté le 27-07-2006 à 09:54:04    

Personne n'a une ptite idée ??  
Mici :)

Reply

Marsh Posté le 27-07-2006 à 10:41:16    

Tu peux utiliser le HeaderText pour retrouver ta colonne si tu veux... mais je crois que ça ne va pas te plaire.
 
Sérieusement : que veux-tu ?
Tu veux retrouver une colonne donnée. OK.
 
Elle est identifiée par quoi ?
- Par son numéro de colonne.
- Par le nom du control (sauf dans ton cas)
- Quoi d'autre ????
 
Comment tu veux retrouver ta colonne si tu n'as rien pour l'identifier ?
 
Je te conseille éventuellement :
string password = GrandeMagieDonneMoiLeMotDePasse(myGridView.Rows[i]);
mais c'est pas dispo avant C# 42.0   :D

Reply

Marsh Posté le 27-07-2006 à 12:35:10    

Je sais, je suis difficile, mais j'ai horreur du hardcode.  
Bin en fait, ça ne me déplairait pas d'aller récupérer la colonne par le HeaderText parce que ce dernier se trouve dans un fichier Resource .resx, évidemment :)
 
Comment puis-je faire alors ?  
Merci bien à toi

Reply

Marsh Posté le 27-07-2006 à 12:49:52    

HeaderText c'est une propriété de ta DataColumn
Tu fais une boucle sur la collection de colonnes de ta DataTable, et quand tu cherches l'indice de celle qui contient la donnée que tu veux.
Une fois que tu as l'indice, tu vas chopper ta donnée dans le DataRow, comme tu faisais au début.
Ca bouffe un peu de ressources pask'il faut faire la boucle de recherche à chaque fois, mais pas énorme.

Reply

Marsh Posté le 27-07-2006 à 18:29:43    

Ah oui, pas bête :)
Une dernière question :  

Code :
  1. int index = 0;
  2. foreach (DataControlField field in myGridView.Columns)
  3. {
  4.   if (field.HeaderText == "header 1" )
  5.   {
  6.     // comment récupérer l'index de la colonne
  7.   }
  8.   index++;
  9. }

Dans le code précédent, pour récupérer l'index de la colonne, j'utilise le compteur "index". Ca te semble la bonne méthode ?
Merci bcp pour ton aide en tt cas !! :)

Reply

Marsh Posté le 01-08-2006 à 13:52:38    

Code :
  1. int index = 0;
  2. foreach (DataControlField field in myGridView.Columns)
  3. {
  4.   if (field.HeaderText == "header 1" )
  5.     // Tu sors de la boucle
  6.     break;
  7.   index++;
  8. }
  9. // si l'index est inférieur au nombre de colonnes
  10. if(index < myGridView.Columns.Count)
  11.   // alors index indique la colonne recherchée
  12.   ...
  13. else // si index atteint ou dépasse le nombre de colonnes
  14.   // alors il n'y a pas de colonnes avec le header donné
  15.   ...

Note : Comme DataGrid.Columns n'implémente pas IList (on se demande pourquoi), on est obligé de faire une boucle avec un foreach et un break pour sortir.
C'est hideux, mais bon... c'est pas moi qui ai codé le framework...

Reply

Marsh Posté le 01-08-2006 à 14:26:19    

Oki, a marche :)
Mici bien :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed