我正在使用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()似乎解决了这个问题。
答案 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;