Gridview et checkbox [Résolu]

cs_citadine 12 Messages postés lundi 26 avril 2004Date d'inscription 10 septembre 2008 Dernière intervention - 10 sept. 2008 à 11:11 - Dernière réponse : cs_citadine 12 Messages postés lundi 26 avril 2004Date d'inscription 10 septembre 2008 Dernière intervention
- 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
Afficher la suite 

14 réponses

Répondre au sujet
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 10 sept. 2008 à 14:50
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ggtry
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 10 sept. 2008 à 11:40
0
Utile
Bonjour,
peux-tu donner les délcarations et la bloucle complète stp ?
Commenter la réponse de equinoxe83
cs_citadine 12 Messages postés lundi 26 avril 2004Date d'inscription 10 septembre 2008 Dernière intervention - 10 sept. 2008 à 11:50
0
Utile
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
Commenter la réponse de cs_citadine
cs_citadine 12 Messages postés lundi 26 avril 2004Date d'inscription 10 septembre 2008 Dernière intervention - 10 sept. 2008 à 11:51
0
Utile
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
Commenter la réponse de cs_citadine
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 10 sept. 2008 à 12:00
0
Utile
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 ...
 @+
Commenter la réponse de equinoxe83
cs_citadine 12 Messages postés lundi 26 avril 2004Date d'inscription 10 septembre 2008 Dernière intervention - 10 sept. 2008 à 12:06
0
Utile
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
Commenter la réponse de cs_citadine
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 10 sept. 2008 à 12:53
0
Utile
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
Commenter la réponse de ggtry
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 10 sept. 2008 à 12:57
0
Utile
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 ..
Commenter la réponse de equinoxe83
cs_citadine 12 Messages postés lundi 26 avril 2004Date d'inscription 10 septembre 2008 Dernière intervention - 10 sept. 2008 à 14:21
0
Utile
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
Commenter la réponse de cs_citadine
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 10 sept. 2008 à 14:29
0
Utile
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...
Commenter la réponse de equinoxe83
cs_citadine 12 Messages postés lundi 26 avril 2004Date d'inscription 10 septembre 2008 Dernière intervention - 10 sept. 2008 à 14:36
0
Utile
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
Commenter la réponse de cs_citadine
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 10 sept. 2008 à 14:43
0
Utile
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" ?
Commenter la réponse de equinoxe83
cs_citadine 12 Messages postés lundi 26 avril 2004Date d'inscription 10 septembre 2008 Dernière intervention - 10 sept. 2008 à 14:52
0
Utile
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
Commenter la réponse de cs_citadine
cs_citadine 12 Messages postés lundi 26 avril 2004Date d'inscription 10 septembre 2008 Dernière intervention - 10 sept. 2008 à 15:11
0
Utile
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
Commenter la réponse de cs_citadine

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.