Problème datagrid

Signaler
Messages postés
62
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
24 mars 2007
-
Messages postés
62
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
24 mars 2007
-
Voila le problème que je rencontre, j'ai un datagrid avec une colonne
de checkbox d'ailleurs je ne sais pas pourquoi mais elle s'affiche sur
ma première colonne, je ne sais pas si on peux changer ça mais mon
principal problème ne vient pas de là.

En je veux récupérer l'événement lorsque l'utilisateur va cliquer sur l'une des mes cases à cocher.


J'ai fait ce bout de code mais une erreur apparaît, je ne sais pas d'où vient le problème. Voici le code :


private void InitializeComponent(){

    this.DataGridCom.SelectedIndexChanged += new System.EventHandler(this.DataGridCom_SelectedIndexChanged);

    this.Load += new System.EventHandler(this.Page_Load);

}


private void DataGridCom_SelectedIndexChanged(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)

{

     //Il faut que je regarde quel commercial l'utilisateur vient de cocher ou décocher

     CheckBox MyCheckBox=(CheckBox) e.Item.FindControl("CheckBox1");

     if (MyCheckBox != null){

        MyCheckBox.CheckedChanged +=new EventHandler(MyCheckBox_CheckedChanged);

    }

}

       

private void MyCheckBox_CheckedChanged(object sender, EventArgs e) {

    CheckBox CheckBoxSelectionne=(CheckBox) sender;

    CheckBox MyCheckBox=(CheckBox) e.Item.FindControl("CheckBox1");

    if (CheckBoxSelectionne.Checked){

        Label3.Text+="Vous avez cochez une case";

    } else {

        Label3.Text+="Vous avez décochez une case";

    }

}


Voici l'erreur que j'obtiens lors de la compilation


La méthode
'WebApplication1.WebForm4.DataGridCom_SelectedIndexChanged(object,
System.Web.UI.WebControls.DataGridItemEventArgs)' ne correspond pas au
délégué 'void System.EventHandler(object, System.EventArgs)


mais aussi celle-ci 'System.EventArgs' ne contient pas de définition pour 'Item'


Je pense que si je reègle le premier problème, le second devrait disparaitre.

14 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Bonsoir,


L'erreur que tu obtiens est normal, il suffit de mettre la bonne signature dans ta ma méthode CheckedChanged comme indiqué dans le message d'erreur :


private void MyCheckBox_CheckedChanged(object sender, DataGridItemEventArgs){}

Mais ca ne fonctionnera pas mieux, il faut s'abonner à l'evenement rowCommand de ton datagrid et mettre le autopostback a true sur ton checkbox.





<hr />
Cyril - MVS - MCP
Messages postés
62
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
24 mars 2007

Oui en effet sa ne marche pas mieux, il me créer une autre erreur.

Par contre, je ne trouve pas l'événement rowCommand de mon datagrid, sinon j'ai mis le autopostback à true.


Comment fais tu pour trouver l'événement rowCommand moi je n'ai que les
catégories action avec CancelCommand, DeleteCommand, EditCommand,
ItemCommand, PageIndexChanged, SelectedIndexChanged, SortCommand,
UpadateCommande puis après une autre catégorie Comportement avec
ItemCreated et ItemDataBound. Puis la catégorie Divers avec Disposed,
Init, Load, PreRendr, Unload et enfin la dernière catégorie Données
avec l'événement DataBinding.


Je voudrais savoir aussi comment tu fais pour connaitre tous les
fonctions, méthodes et événements d'un objets par ce que moi je galère.
J'ai déjà été voir sur Msdn mais il ya même pas les évenements
ItemSelectedChanged et les autres pour le dataGrid.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Bonjour,

A force de les utiliser on les connait plus ou moins par coeur :) l'evenement rowcommand est pour le gridview le remplacant de (l'horrible) datagrid, il faut utiliser l'evenement itemcommand dans ton cas.

MSDN possede toutes les infos que tu cherches ou sinon il y a l'intelissense qui aide beaucoup :)

<hr />Cyril - MVS - MCP
Messages postés
62
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
24 mars 2007

Oui mais moi je n'ai pas de GridView mais un DataGrid, cela doit être pour sa que je ne vois pas cet événement.

Si j'ai bien compris le GridView est apparu sur la version 2006 de Visual Net et moi je travaille sur la version 2003.

Je ne peux donc pas utiliser GridView, si ???
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Tu peux utiliser le gridview en utilisant .net 2 et donc visual studio 2005 mais en .net 1.1 ce n'est pas possible.

<hr />Cyril - MVS - MCP
Messages postés
62
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
24 mars 2007

Ok merci.

Donc je ne peux pas utiliser l'événement RowCommand. Bon je suis mal
barré si je comprends bien, il faut que j'aille acheter la version 2005
:). Non mais s'en déconé j'ai pas d'autre solution pour récupérer les
événements de l'utilisateur sur mes checkbox.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Si tu as lu mon post plus haut je te dit d'utiliser itemcommand ;-)

pour ce qui est d'acheter la version 2005, elle est gratuite avec Visual Web Dev Express ... donc si tu fais des trucs simples (pas de créations de contrôles, multi projets dans la meme solution, etc...) tu peux utiliser cette version gratuite :-)

<hr />Cyril - MVS - MCP
Messages postés
62
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
24 mars 2007

Si si, j'ai vu mais la encore je tombe sur une erreur qui est

"La méthode 'WebApplication1.WebForm4.MyCheckBox_CheckedChanged(object,
System.Web.UI.WebControls.DataGridItemEventArgs)' ne correspond pas au
délégué 'void System.EventHandler(object, System.EventArgs)'"


Voici le code

private void InitializeComponent(){

    this.DataGridCom.ItemCommand += new

    System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGridCom_ItemCommand);

    this.Load += new System.EventHandler(this.Page_Load);

}


private void MyCheckBox_CheckedChanged(object sender, DataGridItemEventArgs e){

    CheckBox CheckBoxSelectionne=(CheckBox) sender;

    CheckBox MyCheckBox=(CheckBox) e.Item.FindControl("CheckBox1");

     if (CheckBoxSelectionne.Checked){

        Label3.Text+="Vous avez cochez une case";

    }else{

        Label3.Text+="Vous avez décochez une case";

    }

}


private void DataGridCom_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){

    CheckBox MyCheckBox=(CheckBox) e.Item.FindControl("CheckBox1");

    if (MyCheckBox != null) {

        MyCheckBox.CheckedChanged +=new EventHandler(MyCheckBox_CheckedChanged);
    }
}


Je sais que c'est la même erreur que tout à l'heure mais je ne vois pas ce que je dois changé
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
A partir du message d'erreur tu peux facilement résoudre le problème ...

private void MyCheckBox_CheckedChanged(object sender, DataGridItemEventArgs e){
>
private void MyCheckBox_CheckedChanged(object sender, EventArgs e){

mais tu auras encore d'autres erreurs que je te laisse chercher si je te fais tout tu ne comprendra pas forcement le problème ;-) au pire revient ici et je t'éguillerais

<hr />Cyril - MVS - MCP
Messages postés
62
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
24 mars 2007

En effet j'ai encore une erreur, il me dit que 'System.EventArgs' ne
contient pas de définition pour 'Item' donc j'ai changé un
DataGridCommandEventHandler car je pense que lui peut gérer les items
mais après je reviens sur l'ancienne erreur c'est à dire


La méthode 'WebApplication1.WebForm4.MyCheckBox_CheckedChanged(object,
System.EventArgs)' ne correspond pas au délégué 'void
System.Web.UI.WebControls.DataGridCommandEventHandler(object,
System.Web.UI.WebControls.DataGridCommandEventArgs)'


A mon avis, il faut que je change de signature quelque part mais la
encore je ne sais pas malgré avoir cherché toute cette après midi.

Je veux bien un petit conseil afin que je puisse trouver la solution.
Messages postés
62
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
24 mars 2007

Bon peut être que la nuit porte conseil, j'arrive à lancer mon code mais bon sa ne m'affiche rien.

Losrque je coche une case, la page se recharge s'en doute à cause du autopostback de mes cases à cocher mis à true.

Donc le checkbox que je viens de cocher redevient décocher et je ne rentre pas dans ma fonction DataGridCom_ItemCommand.


Voici donc le code, cela vient peut être de là.


private void InitializeComponent(){

 this.DataGridCom.ItemCommand += new

 System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGridCom_ItemCommand);

 this.Load += new System.EventHandler(this.Page_Load);

}


private void DataGridCom_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {

 Response.Write(" <script>alert("" + "Coucou " +  "");</script> ");

 CheckBox MyCheckBox =(CheckBox)e.Item.FindControl("CheckBox1");

  if (MyCheckBox != null) {

    MyCheckBox.CheckedChanged +=new EventHandler(MyCheckBox_CheckedChanged);

  }

}


private void MyCheckBox_CheckedChanged(object sender, EventArgs e) {

 DataGridCommandEventArgs test = (DataGridCommandEventArgs)e;

 CheckBox CheckBoxSelectionne=(CheckBox) sender;

 CheckBox MyCheckBox=(CheckBox) test.Item.FindControl("CheckBox1");

           

 string nom="";

          

  //on parcours les items du datagrid

  //on compare chaque checkbox avec le checkbox que l'utilisateur a coché

  foreach (DataGridItem ligne in DataGridCom.Items) {

    CheckBox MonCheckBox=(CheckBox) ligne.FindControl("CheckBox1");

     if (MonCheckBox == CheckBoxSelectionne)

      nom=ligne.Cells[1].Text;

  }


   if (CheckBoxSelectionne.Checked) {

    Response.Write("<script>alert(""
+ "Vous avez sélectionné " + nom +
"");</script>");   
           
   

   } else {

    
Response.Write("<script>alert("" + "Vous avez
désélectionné " + nom + "");</script>");

  }

}
Messages postés
62
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
24 mars 2007

Toujours aucune idée ?
Messages postés
62
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
24 mars 2007

Yep Cyril, je veux bien un coup de main, je suis toujours bloqué.

J'ai rajouté un if (!Page.IsPostBack) dans le page_load mais sa change rien, lors du clique sur l'un des checkbox je n'arrive pas à passer dans ma fonction DataGridCom_ItemCommand car il ne m'affiche pas coucou.

Je ne vois pas d'où viens le problème.

Please helpl me !!!
Messages postés
62
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
24 mars 2007

Bon ba sa fait 20 jours que je galère sur ce même problème et je n'ai toujours pas avancé