Event to detect check uncheck [Résolu]

Signaler
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
-
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
-
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 !!

5 réponses

Messages postés
97
Date d'inscription
lundi 2 mai 2005
Statut
Membre
Dernière intervention
21 mars 2008
3
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





                }
    }
}
Messages postés
97
Date d'inscription
lundi 2 mai 2005
Statut
Membre
Dernière intervention
21 mars 2008
3
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
                }
    }
}
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
5
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
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
5
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 !!
Messages postés
666
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 mars 2010
5
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;
    }