2016-04-25 39 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;