Rendre enable une CheckBox dans un GridView [Résolu]

Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Dernière intervention
12 mars 2008
- 24 juil. 2007 à 16:58 - Dernière réponse :
Messages postés
84
Date d'inscription
dimanche 1 juillet 2007
Dernière intervention
8 janvier 2013
- 19 mars 2008 à 16:59
Bonjour tout le monde,

J'ai un GridView remplit a partir d'une DataTable contenant une colonne de type bool, ce qui me genere automatiquement une colonne avec des CheckBox dans mon GridView. Seulement voila ces CheckBox sont disable et pas moyen de les rendre enable. Voila ce que j'ai tente mais sans succes:

GridViewResult.Rows[1].Cells[3].Enabled = true;

ou la colonne 3 ici, contient ma Checkbox.

Je vous remercie d'avance.

PS: desole pour le manque d'accents, qwerty oblige :/
Afficher la suite 

Votre réponse

19 réponses

Meilleure réponse
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Dernière intervention
25 février 2008
- 24 juil. 2007 à 22:44
3
Merci
Ben c est nickel tout ça !

"Ne sachant pas a l'avance combien j'aurais de checkBox,
cela risque de se complique, j'aurais bien aime enable toute mes
checkbox dans une boucle."

Tu le remplis à partir d'un DataTable ton GridView tu peux récupérer le nombre de ligne nécessaire à ta boucle

int nombreDeLignes = tonDataTable.Rows.Count;

for (i=0;i<nombreDeLignes ;i++)
{
if(i<10)
...FindControl(
"ctl0"+i
)...
else

...FindControl(
"ctl"+i
)...

}

Ca devrait le faire

Bonne nuit

_Syl_

Merci cs__Syl_ 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs__Syl_
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Dernière intervention
25 février 2008
- 24 juil. 2007 à 17:20
0
Merci
Bonjour,

La tu actives cellule, mais je sais pas si ça active également les items qui sont contenus dans cette cellule.

Si tu veux directement activer un contrôle dans une cellule, essai de faire un

((CheckBox)GridViewResult.Rows[1].Cells[3].FindControl("IdDeTesCheckBox")).Enable=true;

Dis nous ce que ca donne

Bonne journée

_Syl_
Commenter la réponse de cs__Syl_
Messages postés
28
Date d'inscription
vendredi 6 juillet 2007
Dernière intervention
11 septembre 2007
- 24 juil. 2007 à 17:23
0
Merci
Petite idée au passage sans aucune conviction, le ReadOnly est activé ?
Commenter la réponse de DeadEye0112
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Dernière intervention
12 mars 2008
- 24 juil. 2007 à 17:54
0
Merci
@_Syl_ : le probleme c,est que je n'ai pas cree de checkBox, elles se sont crees automatiquement par le biais de mon champ bool dans ma dataTable, alors je ne sais pas quoi mettre comme id dans le findControl.

@DeadEye01112: desole pour mon novisme, quand tu parle du ReadOnly active, c'est sur quel composant, mon GridView, ma DataTable, une colonne? Parce que je ne trouve pas cette propriete :/

Merci beaucoup
Commenter la réponse de djay99
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Dernière intervention
25 février 2008
- 24 juil. 2007 à 18:19
0
Merci
Ok

Elles sont crées automatiquement, mais comment ?
C'est toi qui a fait une méthode pour ?
C'est une option ou une propriété du GridView ?

L'idée étant de voir s'il n'y a pas moyen de leur attribuer un Id lors de leur création.

Autre piste quand tu affiches ta page dans ton navigateur, jette un oeil au source pour voir quel Id leur est attribué (ca ne sera pas le rigoureusement le même que celui attribué par asp avant de passer en Html mais il s'y retrouvera normalement) (je sais pas si je suis très clair :P)

typiquement quand tu crées une colonne de LinkButton (pour l exemple) dans un gridview l'id (dans le source de la page) est de la forme :
ctl00_ContentPlaceHolder1_GridView1_ctl04_IDdulinkButton

ou IDdulinkButton est l'id spécifié dans la page asp (<asp:LinkButton ID="IDdulinkButton" blbalbalba...)

ca te permettra de voir s'il y a un Id rajouté par asp et si oui quelle tête il a


Bonne soirée

_Syl_
Commenter la réponse de cs__Syl_
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Dernière intervention
12 mars 2008
- 24 juil. 2007 à 19:02
0
Merci
Merci _Syl_, en fait des que l'on met un attribut de type bool dans la DataTable, il en resulte une checkBox dans le GridView sans que j'ai besoin de la creer. De ce fait, je n'ai donc pas cree d'ID pour mes checkBox, d'ou ma difficulte a y acceder.

Sinon dans le source de ma page asp, voici comment est declaree ma checkBox:

 

Merci
Commenter la réponse de djay99
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Dernière intervention
12 mars 2008
- 24 juil. 2007 à 19:09
0
Merci
Desole pour le double post.

Lorsque je passe l'ID de mq checkBox recuperee dans le source de la page dans la fonction que tu m'a conseillee auparavant,

((CheckBox)GridViewResult.Rows[1].Cells[3].FindControl("GridViewResult_ctl02_ctl00")).Enable=true; 

j'obtiens le message d'erreur suivant:

Object reference not set to an instance of an object.
Commenter la réponse de djay99
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Dernière intervention
25 février 2008
- 24 juil. 2007 à 20:27
0
Merci
Oui, c'est normal que tu obtiennes une erreur,

Comme j'ai tenté de l'expliqué plus haut (maladroitement je l'admet) l'Id que tu récupères dans la source ne correspond pas exactement à celui que l'on aurait pu attribuer dans la page aspx.

L'erreur vient du fait que tu demandes de trouver un contrôle en fonction d'un Id qu'il aura dans la page html, alors que la fonction FindControl te renvoie un contrôle pour un Id présent dans les attributs de la page aspx

"
typiquement quand tu crées une colonne de LinkButton (pour l
exemple) dans un gridview l'id (dans le source de la page) est de la
forme :
ctl00_ContentPlaceHolder1_GridView1_ctl04_IDdulinkButton

ou IDdulinkButton est l'id spécifié dans la page asp (les Id visibles dans le source sont ceux générés par ASP, et non ceux que l'on a pu éventuellement mettre dans le source ASP.

Ce que l'on peut voir avec l'id "GridViewResult_ctl02_ctl00" que tu récupères dans ton source c'est qu'effectivement les checkbox n'ont pas d'Id avant la génération html.

Soit, on va essayer de faire autrement alors.

On va debugger, (et on est content)

En debuggant, quels sont les contrôles que tu peux trouver dans GridViewResult.Rows[1].Cells[3] ?

Si tu mets une ligne du style
int nbDeControles=GridViewResult.Rows[1].Cells[3].Controls.Count;

ou mieux
ControlCollection maCollec=GridViewResult.Rows[1].Cells[3].Controls;
avec un point d'arrêt, qu'est ce que le
 quickWatch te donne ?
Y'a t-il des contrôles de présents ?
Quel tête ils ont ?
Commenter la réponse de cs__Syl_
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Dernière intervention
12 mars 2008
- 24 juil. 2007 à 21:10
0
Merci
J'ai mis un point de debugg de la maiere dont tu me l a indiquee auparavant et j'ai un control, voici ce que me dit le quickWatch

[0] = {Text = "" Checked = false}

Merci vraiment pour ton aide
Commenter la réponse de djay99
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Dernière intervention
12 mars 2008
- 24 juil. 2007 à 21:30
0
Merci
Je crois que tu viens de m'enlever une sacree epine du pied:

grace au debugger, je peux trouver l'id de ma checkBox et ainsi pouvoir faire

((

CheckBox)GridViewResult.Rows[1].Cells[3].FindControl(
"ctl00")).Enabled =
true;

Cela m'a bien enable ma checkBox^^.

Par contre, maintenant que j'ai l'id je peux changer cet id. Par contre une chose m'echappe encore: je suis oblige de faire tourner le debugger afin de connaitre l'id. Ne sachant pas a l'avance combien j'aurais de checkBox, cela risque de se complique, j'aurais bien aime enable toute mes checkbox dans une boucle.

Merci encore de ton aide precieuse
Commenter la réponse de djay99
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Dernière intervention
12 mars 2008
- 25 juil. 2007 à 16:23
0
Merci
C'est bon en faisant une boucle en gardant "ctl00" comme id, je peux enable toute mes checkBox.

Pendant que je suis j'aurais une autre petite question rapide concernant  mon gridView:

comment puis je faire pour recuperer les valeurs de mes checkBox dans mon gridView dans une deuxieme page apres avoir submit mon formulaire contenant mon gridView?

Merci 
Commenter la réponse de djay99
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Dernière intervention
25 février 2008
- 25 juil. 2007 à 19:59
0
Merci
Tu dois pouvoir faire ça en utilisant les variables de session je pense.

Jette un oeil du côté du Global.asax

_Syl_
Commenter la réponse de cs__Syl_
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Dernière intervention
12 mars 2008
- 25 juil. 2007 à 22:40
0
Merci
Merci _Syl_ mais je ne vois pas bien quelles methodes presentes dans global.asax me permettrais de recuperer mon gridView dans ma deuxieme page, encore desole pour mon novisme :/
Commenter la réponse de djay99
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Dernière intervention
12 mars 2008
- 25 juil. 2007 à 23:09
0
Merci
Sinon je crois que je vais ouvrir un autre topic car on deborde un peu du sujet de base la je crois ^^. si tu veux tu peux rejoindre le nouveau topic ;) en tout cas merci de ton aide qui m'a bien fait avance 
Commenter la réponse de djay99
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Dernière intervention
25 février 2008
- 26 juil. 2007 à 10:55
0
Merci
Je sais pas si le nouveau Topic a été ouvert ou pas, au pire les admins déplaceront les posts qu'ils jugent au mauvais endroit.

Pour le Global.asax, j'ai pas encore appris à le manipuler correctement en 2.0 donc je passe par l'ancienne méthode qui consiste à créer un Global.asax.cs dans lequel je peux déclarer des variables et méthodes globales (utilisables depuis n'importe quelle page)

Dans le Global.asax il faut juste mettre la ligne suivante :

<%@ Application Language="C#" Inherits="Global" %>


et il faut créer une classe "Global" dans le Global.asax.cs

public class Global : System.Web.HttpApplication
{

//ici tu peux déclarer des variables qui seront accessibles depuis les autres //pages

public Global()
{
//
// TODO: Add constructor logic here
//
}

//les différentes méthodes relatives à la session (qui se trouvent dans le //script du Global.asax généré automatiquement par Visual (Add new Item...))
//les méthodes que tu veux communent à toutes les pages
}


Pour récupérer la valeur d'une variable depuis une page
Global.laVariable;
ou Global.laMethode(); pour une méthode


Bonne journée, bon courage

_Syl_
Commenter la réponse de cs__Syl_
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Dernière intervention
25 février 2008
- 26 juil. 2007 à 10:56
0
Merci
J'oubliais, il faut mettre le fichier Global.asax.cs dans le dossier AppCode

_Syl_
Commenter la réponse de cs__Syl_
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Dernière intervention
12 mars 2008
- 26 juil. 2007 à 14:56
0
Merci
Ah oki, merci beaucoup _Syl_, je n'avais pas vu l'utilite de global.asax comme ca, je pansait que c'etait juste pour gerer des evenement generaux. Ah bah du coup ca simplifie mon probleme largement^^. Par contre la pour mon projet c est nickel, mais est ce vraiment propre de pratiquer ca, parce que la en fait je vais juste me servir de global pour mettre des donnes?

Merci beaucoup _Syl_
Commenter la réponse de djay99
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Dernière intervention
12 mars 2008
- 26 juil. 2007 à 17:06
0
Merci
salut bah en fait de l'ai passe en variable de session comme tu avais pu me l'indiquer auparavant:

Session["NomDeVariable"] = MonTableau;

et apres je le recupere facilement dans ma seconde page ^^

Merci
Commenter la réponse de djay99
Messages postés
84
Date d'inscription
dimanche 1 juillet 2007
Dernière intervention
8 janvier 2013
- 19 mars 2008 à 16:59
0
Merci
saha tous le monde
j'ai ajouter un controle CheckBox dans ma datagridview pour selectionner des lignes mais j'arrive pas a Coché ses checkbox il sont verouer ...???? comment faire pour activier la selection par se controle (CheckBox),et recuperer les linges selectionner
aerci
Commenter la réponse de kikodos23

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.