2009-08-07 7 views
0

J'ai une vue de données dont la source de données est datatable. J'ajoute une colonne de case à cocher à cette vue de données. Deux problèmes auxquels je suis bloqué: 1. Lorsque l'utilisateur clique sur l'une des cellules de cette colonne, je dois d'abord obtenir l'état de la case à cocher. 2. Si l'état n'est pas coché, une boîte de message apparaît pour demander si l'utilisateur veut le vérifier. Il s'agit d'une boîte aux lettres YesNoCancel. L'état de la case à cocher doit être coché si l'utilisateur sélectionne Oui ou Non. Pour annuler, il doit conserver l'état d'origine. Si l'état est coché et que l'utilisateur clique sur la case à cocher, une boîte de message apparaît demandant si l'utilisateur veut décocher la case (OuiNon), oui il doit changer l'état à non coché et Non il doit laisser la case à cocher Etat.Modification de l'état de la case à cocher dans une colonne de case à cocher en fonction d'une condition

Voici le code qui ne semble pas fonctionner:

if (e.RowIndex != -1) 
     { 

      DataGridViewRow dr = dataGridView1.CurrentRow; 

      DataGridViewCheckBoxCell chkCell = (DataGridViewCheckBoxCell)dr.Cells[0]; 

      if (chkCell.Value == null) 
      { 
       DialogResult dResult = MessageBox.Show("Do you want to mark this value for deletion?","Delete",MessageBoxButtons.YesNoCancel); 
       if (dResult == DialogResult.Yes) 
       { 
        chkCell.Value = true; 

       } 
       else if (dResult == DialogResult.No) 
       { 
        chkCell.Value = true; 

       } 
       else if (dResult == DialogResult.Cancel) 
       { 
        chkCell.Value = false; 

       } 
      } 

      //else if ((bool)chkCell.Value == true) 
      else if ((bool)chkCell.Value == true) 
      { 
       DialogResult dResult = MessageBox.Show("Do you want to unmark this value!","Delete",MessageBoxButtons.YesNo); 
       if (dResult==DialogResult.Yes) 
       { 
        chkCell.Value = false; 
       } 
       else 
       { 
        chkCell.Value = true; 
       } 
      } 
      else if ((bool)chkCell.Value == false) 
      { 
       DialogResult dResult = MessageBox.Show("Do you want to mark this value for deletion?", "Delete", MessageBoxButtons.YesNoCancel); 
       if (dResult == DialogResult.Yes) 
       { 
        chkCell.Value = true; 
       } 
       else if (dResult == DialogResult.No) 
       { 
        chkCell.Value = false; 
       } 

      } 
     } 

Le code est en cas CellContentClick.

+0

Dans quel événement se situe ce code? – Thies

+0

C'est dans l'événement dataGridView1_CellContentClick –

Répondre

1

Gérer exception pour cas null, je pense que c'est mieux.

Ensuite, j'ai réécrit votre code avec quelques ajouts, c'est-à-dire la méthode EndEdit de datagridview pour valider la modification de ligne d'origine avant de revenir à la valeur précédente.

if (e.RowIndex != -1) 
{ 
    DataGridViewRow dr = dataGridView1.CurrentRow; 

    DataGridViewCheckBoxCell chkCell = (DataGridViewCheckBoxCell)dr.Cells[3]; 

    try 
    { 
     if ((bool)chkCell.Value == true) 
     { 
      DialogResult dResult = MessageBox.Show("Do you want to unmark this value!", "Delete", MessageBoxButtons.YesNo); 
      if (dResult == DialogResult.Yes) 
      { 
       chkCell.Value = false; 
      } 
      else 
      { 
       dataGridView1.EndEdit(); 
       chkCell.Value = true; 
      } 
     } 
     else if ((bool)chkCell.Value == false) 
     { 
      DialogResult dResult = MessageBox.Show("Do you want to mark this value for deletion?", "Delete", MessageBoxButtons.YesNo); 
      if (dResult == DialogResult.Yes) 
      { 
       chkCell.Value = true; 
      } 
       else if (dResult == DialogResult.No) 
      { 
       dataGridView1.EndEdit(); 
       chkCell.Value = false; 
      } 
     } 
    } 
    catch (Exception) 
    { 
     DialogResult dResult = MessageBox.Show("Do you want to mark this value for deletion?", "Delete", MessageBoxButtons.YesNoCancel); 
     if (dResult == DialogResult.Yes) 
     { 
      chkCell.Value = true; 
     } 
     else if (dResult == DialogResult.No) 
     { 
      chkCell.Value = true; 
     } 
     else if (dResult == DialogResult.Cancel) 
     { 
      dataGridView1.EndEdit(); 
      chkCell.Value = false; 
     } 
    } 
} 
dataGridView1.EndEdit(); 
Questions connexes