我使用ContexMenuStrip
在DataGridView
删除一些行,但它不能正常工作。如何在选中单元格后停止DataGridView编辑?
每次检查3行,选择ContexMenuStrip
后,它只会删除2行。当我做这个代码没有ContexMenuStrip
(通过Button
),正常工作。
当我看到行为时,我明白当前行正在编辑但未完成。双击当前行停止编辑我的ContexMenuStrip
正常工作。
检查CheckBox
后如何停止编辑?
我使用ContexMenuStrip
在DataGridView
删除一些行,但它不能正常工作。如何在选中单元格后停止DataGridView编辑?
每次检查3行,选择ContexMenuStrip
后,它只会删除2行。当我做这个代码没有ContexMenuStrip
(通过Button
),正常工作。
当我看到行为时,我明白当前行正在编辑但未完成。双击当前行停止编辑我的ContexMenuStrip
正常工作。
检查CheckBox
后如何停止编辑?
当一个单元格被选中并编辑后,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
我用你的代码,它能够正常工作。但我不明白需要{this.dataGridView1.CurrentCellDirtyStateChanged + = DataGridView1_CurrentCellDirtyStateChanged;} – saeid