DataGridView在TabControl中从Datatable中丢失了一行

时间:2015-07-20 14:06:37

标签: c# datagridview datatable

我的应用程序使用DataGridView坐在TabPageDataTable作为数据源。我创建DataTable,填充行并在启动时将DataGridView's数据源设置为DataTable。像这样

        aData.Columns.Add("Description", typeof(string));
        aData.Columns.Add("OID", typeof(string));
        aData.Columns.Add("Value", typeof(string));
        aData.Rows.Add(new object[] { "Row 1", 0, null });
        aData.Rows.Add(new object[] { "Row 2", 1, null });
        aData.AcceptChanges();
        dgTest.DataSource = aData;

我有一个执行并触发将更新DataTable值的事件的线程。

一切正常,直到你开始在TabPages之间切换,然后DataGrid失去一条行。如果单击列标题对行进行排序,则会弹回。但是在TabPages之间切换,它会再次消失。

如果您插入DataGrid,则Rows属性仅显示1行,但DataTable仍显示2行。

我对为什么会发生这种情况感到有点困惑,如果有什么我做错了。我添加了一个具有相同行为的示例应用here

1 个答案:

答案 0 :(得分:2)

您需要从UI线程调用AcceptChanges。在代码中进行下一次更改:

// aData.AcceptChanges(); <- change this to the code below inside your OnResult event
this.BeginInvoke(new Action(() => { aData.AcceptChanges(); }));

您的活动现在应如下所示:

void rm_OnResult(int Row, int Value)
{
    DataRow[] dr;

    dr = aData.Select("OID = '" + Row + "'");
    dr[0]["Value"] = Value.ToString("#,###.00");
    this.BeginInvoke(new Action(() => { aData.AcceptChanges(); }));
}