2016-12-10 20 views
-1

Ich habe DataGridViewCheckBox Spalte, die nicht gebunden ist. Wenn Benutzer den Status check ändert, muss ich eine Methode ausführen, die den Status jeder Zeile überprüft, nach der Kontrollkästchenspalte sucht und basierend auf diesem Prüfstatus einige Berechnungen für andere Spalten durchführt.DataGridViewCheckBox Cell Check-Ereignis in WinForms

Bisher jeden Fall, dass ich versucht: CellContentClick, CellMouseUp , CellValidated ,fire AFTER I leave the cell or grabs DataGridViewCheckBox` Prüfstatus CellValueChanged, die vor ist, Maßnahmen zu ändern.

Welches Ereignis ermöglicht es, die Value direkt nach der Änderung, aber bevor ich die Zelle oder Zeile verlassen?

Antwort

1

Zunächst müssen Sie die Eigenschaften DataGridViewCheckBoxColumn TrueValue und FalseValue festlegen. Dann sollten Sie DataGridView CellContentClick und CellValueChanged behandeln, um zu bestimmen, ob die Zelle überprüft wird oder nicht.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     var checkBoxColumn = (DataGridViewCheckBoxColumn)this.dataGridView1.Columns[0]; 
     checkBoxColumn.TrueValue = true; 
     checkBoxColumn.FalseValue = false; 

     this.dataGridView1.CellContentClick += new DataGridViewCellEventHandler(dataGridView1_CellContentClick); 
     this.dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged); 
    } 

    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
    { 
     DataGridViewCheckBoxCell cell = (sender as DataGridView).Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewCheckBoxCell; 

     if (cell != null) 
     { 
      if (cell.Value == cell.TrueValue) 
      { 
       MessageBox.Show("Cell checked."); 
      } 
      else 
      { 
       MessageBox.Show("Cell unchecked."); 
      } 
     } 
    } 

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     var dataGridView = sender as DataGridView; 

     if (dataGridView.Columns[e.ColumnIndex] is DataGridViewCheckBoxColumn) 
     { 
      // Raise CellValueChanged 
      dataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit); 
     } 
    } 
}