防止数据表.ColumnChanged从递归触发
本文关键字:递归 ColumnChanged 数据表 | 更新日期: 2023-09-27 18:07:56
我在DataGridView中有三列,用户可以输入时间、开始和结束的任何组合。只要改变其中任何一个,就计算另外两个。
我的想法是使用DataTable。ColumnChanged事件处理程序。不出所料,在ColumnChanged处理程序中计算值会导致事件处理程序再次触发,并以无限循环结束。
我尝试了各种设置标志和临时删除事件处理程序的方法,但无论我做什么,事件继续反复触发。
谁能提供关于如何确保事件仅在第一次更改时触发,或者不处理相同的代码(并随后导致事件再次触发)的想法?
多谢马特
我试过你的方法,效果很好。下面是代码:
DataTable dt;
bool SilenceMode;
private void Form1_Load(object sender, EventArgs e)
{
var dt = new DataTable();
dt.Columns.Add("A");
dt.Columns.Add("B");
dt.ColumnChanged += ColChange;
dataGridView1.DataSource = dt;
}
void ColChange(object sender, DataColumnChangeEventArgs e )
{
if (!SilenceMode)
{
SilenceMode = true;
//******************
//Here edit DataTable Without infinity loop
string colNameToChange = e.Column.ColumnName == "A" ? "B" : "A";
e.Row[colNameToChange] = e.ProposedValue;
//******************
SilenceMode = false;
}
}
但我认为这是更好的实现它在UI(事件的DataGridView)。