Event to detect check uncheck [Résolu]

olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 11 févr. 2008 à 23:08 - Dernière réponse : olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention
- 8 mai 2008 à 20:35
Bonjour

Je me heurte a un problème de detection d'event permettant de dtecter le check ou uncheck d'un checkbox 
dans un datagridview, ou un checkboxlist

tout ce que j'ai essayé pour le datagridview ne me donne jamais l'état du current row !

J'ai essayé l'event CellValueChanged et l'event CellContentClick: meme resultat l'etat du current row que je viens de cliquer n'est pas rendu, mais si je clique un autre, le précédant est alors interpreté ???
Il y a donc systematiquement retard a l'allumage ?

voici ce que je fais
 ( j'ai aussi essayé l'event  CellValueChanged(object sender, DataGridViewCellEventArgs e))

    private void dgv_chauff_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
      string chauff = "";
      foreach (DataGridViewRow cRow in dgv_chauff.Rows)
      {
        if (null != cRow.Cells[0].Value)
        {
          if ((bool)cRow.Cells[0].Value == true)
          {
            if (chauff.Length > 0)
            {
              chauff = chauff + ",";
            }
            chauff = chauff + cRow.Cells[1].Value;
          }
        }
      }
      tb_sel.Text = chauff;
   }


Quelqu'un a-t-il une idée ?
Merci de votre aide .

Avec le checklistbox c'est un peu different, je n'ai pas trouvé l'event permettant de dire si une valeur a changé donc a chaque event select je parcours tous le checklisbox pour verifier les valeurs checkées.

Je m'attendais a ovoir des event plus spécifiques !!
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 14 févr. 2008 à 15:34
3
Merci
Sinon tu peu checker et de-checker toi même par ce biais là.
C'est un moyen assez drastique mais comme ça tu est sur de ce qui ce passe dans tes checkbox, et de récuperer facilement les checkés

(en mettant la valeur readonly à true de la cellule contenant la checkbox) :




private void Tableau_MouseDown(object sender, MouseEventArgs e)
{
    DataGridView.HitTestInfo myHitInfo = Tableau.HitTest(e.X, e.Y);

  if (e.Button == MouseButtons.Left)
    {
                 if ((myHitInfo.ColumnIndex == 0) && (myHitInfo.RowIndex > -1))
                {
                     if (Convert.ToBoolean(this.Tableau.Rows[myHitInfo.RowIndex].Cells[0].Value) == true)
                       



Tableau



.Rows[i].Cells[0].Value = false;
                    else




                        Tableau



.Rows[i].Cells[0].Value = true;




                    //et la ton code





                }
    }
}

Merci cs_Kassidy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de cs_Kassidy
cs_Kassidy 97 Messages postés lundi 2 mai 2005Date d'inscription 21 mars 2008 Dernière intervention - 13 févr. 2008 à 12:59
0
Merci
Salut,
A tu essayer le CellMouseDown pour le datagridview?
un truc genre :

private void Tableau_MouseDown(object sender, MouseEventArgs e)
{
    DataGridView.HitTestInfo myHitInfo = Tableau.HitTest(e.X, e.Y);

  if (e.Button == MouseButtons.Left)
    {
                 if ((myHitInfo.ColumnIndex == 0) && (myHitInfo.RowIndex > -1))
                {
                      //et la ton code
                }
    }
}
Commenter la réponse de cs_Kassidy
olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 13 févr. 2008 à 14:19
0
Merci
Merci

Je vais essayer, mais il faut evidement que la valeur du check box suive l'event car si je detecte un mousedown il faut encore tester la valeur si c'est checké ou pas
Commenter la réponse de olibara
olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 15 févr. 2008 à 00:03
0
Merci
Merci Kassidy,

Voila quelque bon trucs,

Mais depuis que j'ai decouvert que lors de l'event RowEnter le currentrow n'etais pas celui que l'on entrait mais celui que l'on quittait, je me demande si un effet de ce genre ne dois pas etre interpreté dans d'autres Event et que je me serais fais avoir avec ca !!

Pour connaitre le nouveau currentrow lors de l'event rowenter il faut utiliser la propriété RowIndex de l'event !!
Commenter la réponse de olibara
olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 8 mai 2008 à 20:35
0
Merci
Salut a tous

Je reviens sur ce viex problème qui en est vraiment un et voici la meilleure solution trouvée soufflée par Kassidy


Ca peut toujours servir !!

    private void dgv_viewTour_CellClick(object sender, DataGridViewCellEventArgs e)
    {
      if (e.ColumnIndex != 0) return;  // la colonne du checkbox
      DataGridViewRow cRow = dgv_viewTour.Rows[e.RowIndex];
      if (cRow.Cells[0].Value == null)
      {
        cRow.Cells[0].Value = true;
        return;
      }
      cRow.Cells[0].Value = (bool)(cRow.Cells[0].Value) ? false : true;

// traitement collatéral
      int val = (bool)(cRow.Cells[0].Value) ? 1 : 0;
      DataRowView cRv = (DataRowView)cRow.DataBoundItem;
      cRv.Row["display"] = val;
    }
Commenter la réponse de olibara

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.