选择并编辑单元格后,DataGridView
财产IsCurrentCellDirty
被设定为True
。如果您在该状态发生变化时捕获事件处理程序DataGridViewCheckBoxCell
,你可以打电话DataGridView.EndEdit() https://msdn.microsoft.com/en-us/library/ms158620(v=vs.110).aspx立即完成这些更改。
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 https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.iscurrentcelldirty(v=vs.110).aspx每当您编辑当前单元格时都会更新。上面的第一行代码允许您附加到CurrentCellDirtyStateChanged
event 你自己的事件处理程序(DataGridView1_CurrentCellDirtyStateChanged
)。因此,每当单元格变脏时,幕后都会调用基本级别事件,然后也会调用您的方法。如果没有该行,您的方法将不会被调用。这+=
运算符是什么attaches您的事件调用链方法。
例如,添加以下处理程序:
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