Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1425 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1413466
Roodie
Posté le 25-07-2006 à 23:31:56  profilanswer
 

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
mood
Publicité
Posté le 25-07-2006 à 23:31:56  profilanswer
 

n°1413539
Benwoua
XVI
Posté le 26-07-2006 à 04:19:33  profilanswer
 

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;

n°1413593
Roodie
Posté le 26-07-2006 à 09:46:01  profilanswer
 

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

n°1414285
Roodie
Posté le 27-07-2006 à 09:54:04  profilanswer
 

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

n°1414324
_Mose_
Lonesome coder
Posté le 27-07-2006 à 10:41:16  profilanswer
 

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

n°1414422
Roodie
Posté le 27-07-2006 à 12:35:10  profilanswer
 

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

n°1414434
_Mose_
Lonesome coder
Posté le 27-07-2006 à 12:49:52  profilanswer
 

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.

n°1414867
Roodie
Posté le 27-07-2006 à 18:29:43  profilanswer
 

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 !! :)

n°1417412
_Mose_
Lonesome coder
Posté le 01-08-2006 à 13:52:38  profilanswer
 

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

n°1417447
Roodie
Posté le 01-08-2006 à 14:26:19  profilanswer
 

Oki, a marche :)
Mici bien :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

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

 

Sujets relatifs
[RESOLU] insérer par valeur[Résolu] Récupérer le chemin d'un fichier que l'on upload
[Résolu] Pb utilisation VLOOKUP[RESOLU] Petit soucis de cookies
[résolu pour le momen]faire executer un prog a chaque démarrage de win[Resolu]Rave report CalcOp component
[RESOLU] pour afficher toutes les fonctionsTransformer un DataInputStream en byte[ ] [RESOLU]
[resolu] afficher une fois si il existe déjà 
Plus de sujets relatifs à : [Résolu] [C# .net] Récupérer des valeurs dans un GridView


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR