2016-04-25 70 views
0

我使用LINQ to SQL类,其构造函数之前(在表添加到它,它的工作原理)初始化:数据源不更新,只与LINQ

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项目)


listBox1.DataSource = dc.MyTable.ToList()似乎解决了问题,由作者Ehsan萨贾德在评论中回答。

+0

WinForms或WPF? – StepUp

+0

添加了一个编辑,它是一个Winforms项目 – hungariandude

+4

你有没有尝试过:''listBox1.DataSource = dc.MyTable.ToList()''? –

回答

0

当您通过分配更新数据源的确切相同的对象时,控件永远不会知道某些更改。有大量的项目时

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

ToList()可以事业服务表现(https://stackoverflow.com/a/15027581/4550393)问题:如果你不希望实现MVVM,MVC或类似的东西,你可以只清除值。因为在这种情况下你并不需要ToList()更好的解决方案是清除列表并重新绑定它:

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