阻止DataTable.ColumnChanged递归触发

时间:2014-06-09 07:12:01

标签: c# datagridview

我在DataGridView中有三列,用户可以输入时间,开始和结束的任意组合。更改其中任何一项后,将计算其他两项。

我的想法是使用DataTable.ColumnChanged事件处理程序。不出所料,计算ColumnChanged处理程序中的值会导致事件处理程序再次触发并最终处于无限循环中。

我已经尝试了各种方法来设置标志并暂时删除事件处理程序,但无论我做什么,事件都会反复触发。

任何人都可以提供有关如何确保事件仅在第一次更改时触发的想法,或者不会处理相同的代码(并随后导致事件再次触发)吗?

非常感谢 马特

1 个答案:

答案 0 :(得分:1)

我尝试过你的方式,它完美无缺。这是代码:

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的事件)。