datagridview CellEndEdit 触发两次
本文关键字:两次 CellEndEdit datagridview | 更新日期: 2023-09-27 18:34:16
我对datagridview的CellEndEdit
事件有点问题。虽然我理解问题实际是什么的概念,但任何规避它的尝试似乎都失败了。
基本上,我有一个数据网格视图,在CellEndEdit
事件中,我对数据库进行检查以确保该条目不是重复的。如果是,我用一个消息框提示用户,告诉他们他们不能输入重复项,然后我以编程方式将值更改回其原始状态/值,并将单元格返回到"编辑"状态。
我的理解是,我以编程方式更改值这一事实是事件触发两次的原因。为了规避,我在第一次进入事件时设置了一个标志,然后提示 + 设置 + 重新编辑,然后将标志设置为 false。这行不通...谁能告诉我为什么或如何做到这一点?
以下是事件代码:
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if(e.ColumnIndex == this.dataGridView1.Columns["Name"].ColumnIndex)
{
if(!this.CellBeingEdited)
{
string NewName = this.dataGridView1.Rows[e.RowIndex].Cells["Name"].Value.ToString();
//-== DATABASE CODE REMOVED ==-
bool IsDuplicate = ...;
if(IsDuplicate)
{
MessageBox.Show("Cannot have duplicate item names at this level!");
this.dataGridView1.CurrentCell = this.dataGridView1.Rows[e.RowIndex].Cells["Name"];
this.CellBeingEdited = true;
this.dataGridView1.CurrentCell.Value = this.LastEditedRowName;
this.CellBeingEdited = false;
this.dataGridView1.BeginEdit(false);
return;
}
}
}
}
当我编辑一行中的值时,这段代码不会触发两次:
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
string test = "test";
if (this.dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString() == test)
{
this.dataGridView1.CurrentCell = this.dataGridView1.Rows[e.RowIndex].Cells[0];
this.dataGridView1.CurrentCell.Value = "not test";
this.dataGridView1.BeginEdit(false);
return;
}
}
也许你在其他地方称呼这个事件?