我的应用程序使用DataGridView
坐在TabPage
和DataTable
作为数据源。我创建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
答案 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(); }));
}