Gridview et checkbox

Résolu
cs_citadine Messages postés 12 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 10 septembre 2008 - 10 sept. 2008 à 11:11
cs_citadine Messages postés 12 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 10 septembre 2008 - 10 sept. 2008 à 15:11
Bonjour à tous,

J'ai une gridview dans laquelle il y a des cases à cocher. Lorsque je clique sur le bouton "Valider", je parcours les lignes de ma gridview et je dois récupérer l'id de la ligne pour laquelle la case est cochée.
Le pb c'est qu'à chaque fois que je parcours ma gridview, il m'indique que "checked=false" alors que les cases sont bien cochées. Voici ma ligne de code pour le checkbox:

Dim chkAffectation
As CheckBox =
CType(GridViewUtilisateurs.Rows(Index).FindControl(
"chkSelection"), CheckBox)

La procédure fonctionne bien car j'arrive à récupérer l'id de chaque ligne parcouru, mais lorsque je fais le test
"if chkAffection=true then", je ne passe pas ds le code du If.

J'ai essayer ds le RowDataBound, même problème, quelqu'un peut m'aider?

Citadine

14 réponses

ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
10 sept. 2008 à 14:50
Tu effectues ta procédure de validation sur le onclick ?
Une possibilité serait que ta gridview est rebindée à la source de données avant la lecture des checkbox : dans ce cas, les checkbox seraient vides au moment de la lecture à cause du nouveau databind.

GGtry
3
equinoxe83 Messages postés 240 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 février 2011
10 sept. 2008 à 11:40
Bonjour,
peux-tu donner les délcarations et la bloucle complète stp ?
0
cs_citadine Messages postés 12 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 10 septembre 2008
10 sept. 2008 à 11:50
For






Each


myRow


As


GridViewRow


In




GridViewUtilisateur.Rows







Dim


Index


As






Integer




= myRow.RowIndex


Dim


chkAffectation


As


CheckBox =


CType


(GridViewUtilisateur.Rows(Index).FindControl(


"chkSelection"




), CheckBox)



















Dim


coche


As






String


=


CType


(chkAffectation.Checked,


String


)









Dim id As Label




id = CType(GridViewUtilisateurEntite.Rows(Index).FindControl("LabelVal"), Label)





Dim idCle As

Integer
=
CType
(id,
Integer
)

















If


chkAffectation.Checked


Then





strListeCle &= idCle.ToString &






","











End






If











Next











Citadine
0
cs_citadine Messages postés 12 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 10 septembre 2008
10 sept. 2008 à 11:51
For Each myRow As GridViewRow In GridViewUtilisateur.Rows







Dim


Index


As






Integer




= myRow.RowIndex
Dim chkAffectation As CheckBox = CType (GridViewUtilisateur.Rows(Index).FindControl( "chkSelection"
), CheckBox)























Dim id As Label




id = CType(GridViewUtilisateurEntite.Rows(Index).FindControl("LabelVal"), Label)





Dim idCle As

Integer
=
CType
(id,
Integer
)

















If


chkAffectation.Checked


Then





strListeCle &= idCle.ToString &






","











End






If











Next





Citadine
0

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

Posez votre question
equinoxe83 Messages postés 240 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 février 2011
10 sept. 2008 à 12:00
J'imagine que "coche" était un essai en débug ...
ça devrait fonctionner.
A tout hazard, tu es sure que le checkbox que tu va chercher est le bon ?
Vérifie directement dans ta table, éventuellement.
Sait-on jamais ...
 @+
0
cs_citadine Messages postés 12 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 10 septembre 2008
10 sept. 2008 à 12:06
en effet coche c'était en débug
C'est le bon checkbox que cherche et je pense aussi que ça devrait fonctionner, malheureusement ça ne fonctionne pas...

Citadine
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
10 sept. 2008 à 12:53
Bonjour,

If chkAffectation.Checked  semblerait en effet devoir fonctionner pour déterminer quels checkbox sont cochés, à part que tu pouvais simplifier en écrivant seulement Dim chkAffectation As CheckBox = CType (myRow.FindControl( "chkSelection" ), CheckBox)
C'est bizarre que le problème se pose à ce niveau...
En revanche, il y a deux choses que je ne comprends pas dans ce code : pour ton label (id), tu écris "GridViewUtilisateurEntite", ailleurs "GridViewUtilisateur".
D'autre part, tu as :
Dim idCle As

Integer
=
CType
(id,
Integer
)

Tu n'as pas d'erreur à ce niveau ? id est un label... dont la valeur est accessible avec id.text
Je ne vois pas non plus très bien pourquoi tu récupères ta valeur de label comme un integer dans idCle pour juste ensuite le réécrire avec tostring...

GGtry
0
equinoxe83 Messages postés 240 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 février 2011
10 sept. 2008 à 12:57
a la place de celà :
Dim chkAffectation As CheckBox = CType (GridViewUtilisateur.Rows(Index).FindControl( "chkSelection" ), CheckBox)
Je ferais plutôt celà :
dim chkAffectation as checkbox =GridViewUtilisateur.Rows(Index).FindControl( "chkSelection" )
essaie toujours ..
0
cs_citadine Messages postés 12 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 10 septembre 2008
10 sept. 2008 à 14:21
Au niveau de l'id , il n'y a aucun soucis je récupère bien la valeur, et en ce qui concerne le GridView, c'est bien GridViewUtilisateur , j'avais modifié le nom et j'ai oublié de le modifié quand je l'ai mis sur le forum.
Mon problème se situe là: Dim chkAffectation As CheckBox = CType (GridViewUtilisateur.Rows(Index).FindControl( "chkSelection" ), CheckBox)
j'ai testé dim chkAffectation as checkbox =GridViewUtilisateur.Rows(Index).FindControl( "chkSelection" )

mais ça me fait exactement la même chose

Citadine
0
equinoxe83 Messages postés 240 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 février 2011
10 sept. 2008 à 14:29
Selon moi, les éléments de ta base sont toujours à false.
Quel évènement déclenche cette procédure ?
Lorsqu'au début du post, tu parles de "valider", tu évoques quoi ??
Si c'est la validation du gridview entier, le Pb est tout autre.
Mais la première étape est de vérifier les champs directement dans ta base...
0
cs_citadine Messages postés 12 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 10 septembre 2008
10 sept. 2008 à 14:36
En fait, le but c'est d'affecter les éléments que j'ai coché à un groupe d'user, donc au départ ses utilisateurs n'appartiennent à aucun groupe. alors ce que je fais c'est que je sélectionne l'id de ceux qui ont été coché et ensuite je modifierai ds la base.
Quand je dis "valider", c'est qu'une fois que j'ai coché les éléments ds ma gridview, je clique sur un bouton valider qui va effectuer le traitement

Citadine
0
equinoxe83 Messages postés 240 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 février 2011
10 sept. 2008 à 14:43
OK. Je vois !
On est dans un gridview, donc on doit faire un update à chaque ligne affectée (au travers d'un postback sur la case à cocher, par exemple).
A moins de disposer d'une procédure spécifique (mais dont je ne vois pas la teneur).
Si tu retires ce traitement, la base prend bien en compte tes changements lorsque tu "valides" ?
0
cs_citadine Messages postés 12 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 10 septembre 2008
10 sept. 2008 à 14:52
La base ne fait aucune modification car mon test if chkAffectation.checked= true ne fonctionne pas.
En fait je mets les id des ceux qui ont été sélectionné en testant si c'est bien coché et comme il indique false à chaque fois, je ne modifie rien.

Citadine
0
cs_citadine Messages postés 12 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 10 septembre 2008
10 sept. 2008 à 15:11
Oui je effectue le traitement sur "onclick"
En fait c'est bien ça, je n'y avait pas pensé, lorsque je clique sur le bouton, ça recharge la page donc ça me décoche tout.
Merci

Citadine
0
Rejoignez-nous