当一个单元格被选择并编辑后,DataGridView
属性IsCurrentCellDirty
将设置为True
。如果你捕捉到了DataGridViewCheckBoxCell
上此状态的变化事件,你可以调用DataGridView.EndEdit()
立即完成这些更改。
this.dataGridView1.CurrentCellDirtyStateChanged += DataGridView1_CurrentCellDirtyStateChanged;
private void DataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (this.dataGridView1.IsCurrentCellDirty && this.dataGridView1.CurrentCell is DataGridViewCheckBoxCell)
{
this.dataGridView1.EndEdit();
}
}
进一步说明:
在幕后,每当您编辑当前单元格时,DataGridView.IsCurrentCellDirty
将被更新。上面的第一行代码允许您将自己的事件处理程序(DataGridView1_CurrentCellDirtyStateChanged
)附加到 CurrentCellDirtyStateChanged
这个事件中。所以每当单元格变脏时,在幕后会调用基本级事件,然后再调用您的方法。如果没有这行代码,您的方法将不被调用。 +=
运算符是将您的方法附加到事件的调用链中的操作符。
例如,添加以下处理程序:
this.dataGridView1.CurrentCellDirtyStateChanged += DataGridView1_Example1;
// this.dataGridView1.CurrentCellDirtyStateChanged += DataGridView1_Example2;
this.dataGridView1.CurrentCellDirtyStateChanged += DataGridView1_Example3;
private void DataGridView1_Example1(object sender, EventArgs e)
{
Console.WriteLine("Example 1");
}
private void DataGridView1_Example2(object sender, EventArgs e)
{
Console.WriteLine("Example 2");
}
private void DataGridView1_Example3(object sender, EventArgs e)
{
Console.WriteLine("Example 3");
}
// Example 1
// Example 3
private void DataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (this.dataGridView1.IsCurrentCellDirty && this.dataGridView1.CurrentCell is DataGridViewCheckBoxCell)
{
this.dataGridView1.EndEdit();
DataGridViewCell currentCell = this.dataGridView1.CurrentCell;
this.dataGridView1.CurrentCell = null;
this.dataGridView1.CurrentCell = currentCell;
}
}