DataSource不会更新,只能使用LINQ

时间:2016-04-25 10:40:10

标签: c# winforms

我正在使用LINQ To SQL类,它在构造函数之前初始化(将表添加到它,它可以工作):

DataClasses1DataContext dc = new DataClasses1DataContext();

然后我有一个列表框:

listBox1.DataSource = dc.MyTable;
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "PersonID";

然后我想添加一条新记录:

MyTable mt = new MyTable();
mt.Name = "John Smith";
mt.PersonID = 30;
dc.MyTable.InsertOnSubmit(mt);
dc.SubmitChanges();

我想刷新列表框的数据源:

listBox1.DataSource = dc.MyTable;

...但新记录没有显示出来。 但是,如果我像这样更新数据源:

var q = from x in dc.MyTable select x;
listBox1.DataSource = q;

这很有效。

我唯一的问题是:为什么?我看到有些人将DataSource设置为null,然后返回到表,但这并没有解决我的问题。

(这是一个winforms项目)

Ehsan Sajjad在评论中回答说,

listBox1.DataSource = dc.MyTable.ToList()似乎解决了这个问题。

2 个答案:

答案 0 :(得分:0)

当您通过分配完全相同的对象来更新数据源时,控件将永远不会知道某些内容发生了变化。如果您不想实现MVVM,MVC或类似的东西,您可以清除该值:

listBox1.DataSource = null;
listBox1.DataSource = dc.MyTable;

答案 1 :(得分:0)

ToList() 可以导致在拥有大量项目时出现性能问题(https://stackoverflow.com/a/15027581/4550393)。由于在这种情况下你真的不需要ToList(),更好的解决方案是清除列表并在其后重新绑定它:

listBox1.Items.Clear();
listBox1.DataSource = dc.MyTable;