gpt4 book ai didi

c# - 如何在检查单元格后停止 DataGridView 编辑?

转载 作者:行者123 更新时间:2023-11-30 23:13:36 24 4
gpt4 key购买 nike

我在 DataGridView 上使用 ContexMenuStrip 来删除一些行,但它无法正常工作。

每次如果我选中 3 行,在选择 ContexMenuStrip 后它只会删除 2 行。当我在没有 ContexMenuStrip(通过 Button)的情况下执行此代码时,它可以正常工作。

当我看到行为时,我明白当前行正在编辑但没有完成。双击当前行停止编辑后,我的 ContexMenuStrip 工作正常。

Row in edit mode

如何在选中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

关于c# - 如何在检查单元格后停止 DataGridView 编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43530300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com