C# 无法使DataGridView多次绑定到数据源
我有一个Winforms GUI应用程序。我有一个名为C# 无法使DataGridView多次绑定到数据源,c#,multithreading,winforms,data-binding,datagridview,C#,Multithreading,Winforms,Data Binding,Datagridview,我有一个Winforms GUI应用程序。我有一个名为FinishedTests\u Loops\u DGV的简单类列表。正在其他线程(计时器线程)中添加此列表。将新类添加到列表(计时器线程内部)后,我调用updatelopsdgv(),调用DataGridView并更新它: public void updateLoopsDGV() { if (DGV_Loops.InvokeRequired) { DGV_Loops.BeginInvoke((MethodInv
FinishedTests\u Loops\u DGV
的简单类列表。正在其他线程(计时器线程)中添加此列表。将新类添加到列表(计时器线程内部)后,我调用updatelopsdgv()
,调用DataGridView
并更新它:
public void updateLoopsDGV()
{
if (DGV_Loops.InvokeRequired)
{
DGV_Loops.BeginInvoke((MethodInvoker)delegate()
{
DGV_Loops.DataSource = FinishedTests_Loops_DGV;
});
}
}
这只工作一次,这意味着一旦第一个元素被添加到列表中,我会看到第一行出现在DataGridView
中,但是对UpdateLopSDGV()
的任何进一步调用都不会将行添加到DataGridView
。我在调试器中检查了我的列表,例如4个元素长,并且调用了函数,但在DataGridView
中仍然只看到1行
即使我试图通过按下某些按钮(在GUI线程中)来更新DataGridView
:
它仍然不起作用。我做错了什么?我认为您的问题是试图不正确地设置数据源 您说
FinishedTests\u Loops\u DGV
是一个类,并将其作为数据源提供。这很奇怪,因为它绑定到类型
对象,而不是实际的列表
我认为您应该创建一个IEnumerable
变量,并将其作为DataSource
提供,如下所示:
IEnumerable<FinishedTests_Loops_DGV> aList = ...; // actual data get
private void button3_Click(object sender, EventArgs e)
{
DGV_Loops.DataSource = aList;
}
IEnumerable=…;//实际数据获取
私有无效按钮3\u单击(对象发送者,事件参数e)
{
DGV_Loops.DataSource=aList;
}
DataGridView
将不会更新,因为您使用相同的列表实例来设置。数据源
()
然后,列表
不支持集合中更改的通知。
DataGridView
永远不会知道列表中的更改
改为使用BindingList
,那么只需将其绑定到DataSource
一次就足够了。
添加的项目将自动显示在DataGridView
中,您可以为FinishedTests\u Loops\u DGV
变量显示一些代码吗?在问题的第一行:我有一个名为FinishedTests\u Loops\u DGV
IEnumerable<FinishedTests_Loops_DGV> aList = ...; // actual data get
private void button3_Click(object sender, EventArgs e)
{
DGV_Loops.DataSource = aList;
}