GridView et ButtonField (récupérer infos ligne séléctionnée)

Résolu
sdupont64 Messages postés 8 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 19 mars 2008 - 3 mai 2007 à 10:25
sdupont64 Messages postés 8 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 19 mars 2008 - 3 mai 2007 à 17:20
Bonjour tout le monde,
Je suis en stage en ce moment et je viens d'apprendre le vb.net ainsi que l'asp. J'ai passé beaucoup de temps sur les forums de Codes-Sources pour trouver la solution ainsi que dans les différents tutoriaux disponibles. Certains ont déjà eu le même problème que moi mais je n'arrive pas à adapter la solution proposée à mon code.
Mon problème concerne les GridView et leur ButtonField. J'ai une GridView qui se remplit depuis une base de données et une colonne de bouton correspondante (comme celle des select, edit ou encore delete...). J'arrive à connaître l'évènement associé au clic de mon bouton mais je n'arrive pas à récupérer les informations présentes sur la ligne cliquée.
Quelqu'un peut-il m'aider svp D'avance un grand merci!

9 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
3 mai 2007 à 11:50
Bonjour,

pour l'event Select il faut que tu te serve de legridview.SelectedItemIndex, tu dois aussi avoir une propriété SelectedDatakeys ou alors récuperer la collection DataKeys et obtenir la bonne datakey en fonction de ton index.

Pour les autres event il faut passer par la variable e fournit dans la méthode s'abonnant à l'event.

<hr />Cyril - MSP - MCTS ASP.net & SQL
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
3 mai 2007 à 12:13
dans la source ?

c'est au niveau du grdiview que tu spécifie le datakeynames

Cyril - MSP - MCTS ASP.net & SQL
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
3 mai 2007 à 17:07
oula non pas ca !  :p

la propriété DataKeyNames sert à récuperer la clé primaire (ou les clés primaires dans le cas des clés composés) de ton enregistrement à partir de celui là tu peux récuperer les infos de ta ligne. Car en mettant toutes les colonnes dans le datakeynames ca fait exploser le viewstate (en taille).

Pour récuperer la ligne séléctionné n'utilise surtout pas Request.Form, qui est a bannir de la plupart des developpements, mais plutot idDuGridview.SelectedItemIndex ou un truc du genre ou alors tu peux aussi obtenir des informations dans la variable e

idDuGridviev_rowCommand(Object sender, qqchoseEventArgs e)

dans ce e tu as pleins d'information.

<hr />Cyril - MSP - MCTS ASP.net & SQL
3
sdupont64 Messages postés 8 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 19 mars 2008 1
3 mai 2007 à 14:48
Merci pour ton aide jesusonline, j'ai finalement réussi à récupérer une valeur de mon GridView...mais j'ai encore du mal avec les autres colonnes car il me faudrai récupérer 4 valeurs différentes en tout et bien sur, le DataKeyNames est unique dans le tag...Mais bon! Il faut perséverer!!! Alors j'y retourne!
Encore merci
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sdupont64 Messages postés 8 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 19 mars 2008 1
3 mai 2007 à 12:02
Merci jessusonline d'avoir répondu si vite et d'essayer de m'aider alors que ma question peut sembler idiote pour certains...
J'ai essayer dans la source d'ajouter un DataKeyNames mais dès que je le fais, au moment du monGridView.DataBind() une exception se lève : DataBinding: 'System.Data.DataRowView' does not contain a property with the name '<nom du DataKeyName que j'ai donné>'.
Peut être que la solution est évidente mais je ne comprends pas pourquoi je n'y arrive pas.
Je réussi à récupérer le nom des colonnes, le numéro de la ligne sélectionné mais en aucun cas l'intersection des deux!
Vois-tu le problème stp?
Encore merci beaucoup
0
sdupont64 Messages postés 8 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 19 mars 2008 1
3 mai 2007 à 14:13
Merci beaucoup jesusonline je vais essayer tout ça!
Sympa de ta part de prendre du temps pour aider des newbs comme moi
0
sdupont64 Messages postés 8 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 19 mars 2008 1
3 mai 2007 à 15:25
Enfin!!! La persévérance paie des fois ;-)
Pour ceux qui ont le même problème que moi, je vais mettre le code qui m'a permis de récupérer les informations que je voulais...

 Le tag du GridView doit ressembler à ça par exemple :
.
IDAuxiMdt,IDAuxiProv,IDAuxiTP,IDAuxiAR doivent correspondre aux <HeaderTemplate> de vos colonnes (cad aux noms de celles-ci).

 Pour récupérer la ligne séléctionnée, il existe surement d'autres méthodes que la mienne. J'ai utilisé celle-la mais en aucun cas je pense que c'est la meilleure :
Dim ligneSelectionnee As Integer = Request.Form(1).Substring(Request.Form(1).Length - 1)

 Une fois la ligne récupérée, j'ai utilisé ce code :
Dim IDAuxiMdt = idDuGridView.DataKeys(ligneSelectionnee).Item(0)
Dim IDAuxiProv = idDuGridView.DataKeys(ligneSelectionnee).Item(1)
Dim IDAuxiTP = idDuGridView.DataKeys(ligneSelectionnee).Item(2)
Dim IDAuxiAR = idDuGridView.DataKeys(ligneSelectionnee).Item(3)

 Ce code est placé dans l'évènement : idDuGridView_RowCommand qui correspond à l'action du clic dans le GridView.

J'espère que ces renseignements aideront certains d'entre vous...
Et encore un grand merci à Jesusonline qui a pris de son temps pour m'aider! Merci
0
sdupont64 Messages postés 8 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 19 mars 2008 1
3 mai 2007 à 16:45
Petite erreur de ma part...
le DataKeyNames du tag du GridView ne correspond pas aux <HeaderTemplate> du GridView mais aux noms des colonnes retournées par la requete...
Voilà
0
sdupont64 Messages postés 8 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 19 mars 2008 1
3 mai 2007 à 17:20
Bon...ok!
Alors ne suivez pas forcement tout ce que j'ai dit... lol
Et merci d'avoir continué à vouloir m'aider. Tu m'auras été d'une très grande aide.
Suivez plutôt les conseils de Jesusonline ;-)
0
Rejoignez-nous