我有一个包含一些数据的 DataTable,我使用以下代码将其与我的 DataGridView 绑定(bind):
dataGridView1.DataSource = Measures.Table;
在单独的线程中,我从连接的设备读取数据,并使用以下代码将其插入到我的数据表中:
DataRow row = table.NewRow();
row[ "Time" ] = dt;
foreach ( var kvp in measures )
row[ kvp.Key ] = kvp.Value;
table.Rows.Add( row );
在我的表单上,我可以使用按钮更改它的主控件。这两个控件都是 UserControl,其中一个由 dataGridView1 DataGridView 组成。当我向 DataTable 添加一行时,我的 DataGridView 不会更新,直到我切换到另一个控件,并移回带有 DGV 的控件。
我已经阅读了堆栈上的一些解决方案,它们基本上告诉我应该使用 BindingSource,但是这段代码:
BindingSource source = new BindingSource();
source.DataSource = Measures.Table;
dataGridView1.DataSource = source;
效果不太好。
我不知道为什么会发生这种情况,因为我还创建了一个简单的应用程序,其中仅包含 DGV 和使用 Timer.Tick 事件更新的 DataTable,并且它可以在那里工作。有人知道这个 DGV 不 self 更新的原因吗?仅当强制重绘时(通过切换控件或仅调整表单大小),它才会自行更新
最佳答案
首先,数据网格绑定(bind)到数据表的DataView,并在内部处理使用source.DefaultView。
将记录添加到表后,通过项目发出刷新...
dataGridView1.Items.Refresh();
您不必重新绑定(bind)源...如果您从不同的线程执行 items.refresh,请小心,因为网格是基于 UI 的,而不是在幕后。
关于C# DataGridView 不随 DataTable 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27528986/