2017-09-19 4 views
0

Donc, je sais que cette question a été répondue (Do not trigger cell value change event in DataGridView when the value is changed programatically) mais la réponse fournie n'était pas suffisamment documentée et cela n'a pas fonctionné. Essentiellement, je travaille dans un Evénement Changé de Valeur Cellulaire d'un datagridview en validant les données introduites, si les données sont hors d'une plage spécifiée, je les modifie pour qu'elles correspondent. Et là se trouve le problème; quand je le fais par programmation, il déclenche l'événement deux fois; ce que je ne veux pas qu'il fasse.Comment déclencher l'événement de changement de valeur de cellule dans un DataGridView uniquement lorsqu'il est effectué manuellement?

Des idées?

Merci d'avance!

Répondre

1

Vous pouvez désactiver CellValueChangedEvent lorsque vous devez modifier la valeur par programmation. Après avoir modifié la valeur, il suffit de réactiver le CellValueChangedEvent par exemple.

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    //check whether the value is valid 
    var specifiedMax = 100; 
    var compareValue = int.Parse(this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()); 
    if (compareValue > specifiedMax) 
    { 
     //disable the cellvaluechanged event before changing the value 
     this.dataGridView1.CellValueChanged -= this.dataGridView1_CellValueChanged; 
     try 
     { 
      this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 100; 
     } 
     finally 
     { 
      //enable the cellvaluechanged event again 
      this.dataGridView1.CellValueChanged += this.dataGridView1_CellValueChanged; 
     } 
    } 
}