【发布时间】:2014-12-17 15:25:37
【问题描述】:
我有一个包含一些数据的 DataTable,我使用以下代码将它与我的 DataGridView 绑定:
dataGridView1.DataSource = Measures.Table;
在单独的线程中,我从连接的设备读取数据并使用以下代码将其插入我的 DataTable:
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 和 DataTable 更新了 Timer.Tick 事件,它在那里工作。任何人都知道这个 DGV 不更新自身的任何原因吗?它仅在强制重绘时更新自身(使用切换控件或仅调整表单大小)
【问题讨论】:
-
不清楚您是否使用对同一对象的引用。如果添加新行的代码针对表的不同实例执行此操作,那么您应该预料到这种行为
-
是同一个实例。
Measures是一个单例,我用它处理将数据添加到数据表、将它们记录到文件和其他一些东西。Measures.Table只是一个愚蠢的属性{ get { return table } }。此外,正如我在上面所写的,我只需要强制重绘任何东西(比如调整表格大小),DGV 就会显示需要的内容。
标签: c# datagridview datatable