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

Signaler
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
12 mars 2008
-
Messages postés
84
Date d'inscription
dimanche 1 juillet 2007
Statut
Membre
Dernière intervention
8 janvier 2013
-
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 :/

19 réponses

Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
25 février 2008
1
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_
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
25 février 2008
1
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_
Messages postés
28
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
11 septembre 2007
1
Petite idée au passage sans aucune conviction, le ReadOnly est activé ?
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
12 mars 2008

@_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
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
25 février 2008
1
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_
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
12 mars 2008

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
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
12 mars 2008

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.
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
25 février 2008
1
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 ?
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
12 mars 2008

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
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
12 mars 2008

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
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
12 mars 2008

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 
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
25 février 2008
1
Tu dois pouvoir faire ça en utilisant les variables de session je pense.

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

_Syl_
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
12 mars 2008

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 :/
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
12 mars 2008

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 
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
25 février 2008
1
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_
Messages postés
66
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
25 février 2008
1
J'oubliais, il faut mettre le fichier Global.asax.cs dans le dossier AppCode

_Syl_
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
12 mars 2008

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_
Messages postés
22
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
12 mars 2008

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
Messages postés
84
Date d'inscription
dimanche 1 juillet 2007
Statut
Membre
Dernière intervention
8 janvier 2013
2
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