C# DataGridView 不随 DataTable 更新

标签 c# datagridview datatable

我有一个包含一些数据的 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/

相关文章:

c# - 在 C# 中从没有颜色对象的像素中提取 RGB

c# - 为什么此代码中的流保持打开状态?

.net - 在繁忙的多线程应用程序中更新 UI 的最佳方式

c# - Delphi 相当于 C# 的 DataGridView

C# DatagridVIew 删除SQL日期

c# - 程序如何跟踪全局设置(每次执行程序时都相同)

jquery - 如何在内联编辑中使用数据表中的下拉列表

c# - 比较数据表并返回不匹配的行

c# - 如何停止填充数据表 ASP.NET

c# - Mvc asp.net和n层架构