2016-11-20 86 views
1

我有一個對象列表,我想在每秒重新綁定DataGridView。我嘗試了很多東西,bindsource,BindingList和INotifyPropertyChanged接口。當你在你的代碼中靜態收集時,它們工作得很好,但是我需要從數據庫更新數據源,這樣我必須遍歷每個對象並檢查它是新的還是刪除並更新BindingList,但它是解決方案。我寧願寫這樣在每一秒:更新DataGridView控件數據源C#Win表格

BindingListObeject = new BindingList<MyObject>(ListOfMyObjects); 

BindingListObeject.Clear(); 
//in loop 
BindingListObeject.Add(new_object); 

的DataGridView將有滾動,還選擇單元格必須重新綁定數據源後進行選擇。而且網格不應該閃爍。

我該如何管理?我使用EF來獲取我想要的對象列表。

+0

您是否嘗試了Suspend/ResumeLayout以避免閃爍? – McNets

+0

是的,我嘗試過,仍然閃爍 –

回答

1

嘗試ObservableCollection()或任何其他集合與collectionChange事件

而且永遠不要做類似MyCollection的= ...什麼...這就是讓新的對象與MyCollection的新手柄,一段時間你的電網仍綁定到舊的句柄。只是改變收藏,不要續約。

+0

它似乎工作,但是當我重新綁定gridview數據源網格行沒有影響,因爲我看到。對於測試,我從我的列表中刪除項目,然後重新綁定數據源,在查看項目被刪除,一切正常,但網格行仍然是相同的計數,我將調試更多,並在這裏寫我的結果 –

+0

我使用,首先從列表中刪除一個項目,然後再次設置數據源,然後DataGridView.refresh()但網格行數不反映。我需要以某種方式更新代碼方面的行,在查看項目被刪除。哪裏不對? –

+0

它似乎不是一個選項, ObservableCollection 實現INotifyCollectionChanged,而不是IBindingList,並且DataGridView不知道INotifyCollectionChanged。 :(任何想法?我想再次使用它在勝利形式 –