2011-09-11 82 views
8

出於某種原因,添加或刪除數據源項目(一個簡單的BindingList)組合框相應地更新時,但如果我編輯這樣的一個項目,它不會自動更新:ComboBox在DataSource更改時不會自動更新?

myBindingList[index].Name = "NewName"; 
myBindingList[index].Value = newValue; 

爲了得到它更新時,我編輯的項目,而不是創造或刪除我有改變之後做這個項目:

myComboBox.DataSource = null; 
myComboBox.DataSource = myBindingList; 

這樣可以解決問題,但它似乎是一個相當混亂的解決方案。還有大的列表可能會變慢(我知道過早的優化),但仍然有辦法強制ComboBox更新而不完全重新分配其DataSource?

感謝您的閱讀。

回答

6

這在MSDN論壇指出:

的IBindingList的接口包含ListChanged事件,其中相同的組合框 控制掛鉤成如果底層數據源 分配給它實現所述接口。您的數據源必須 用適當的ListChangeEventArgs提升相應的ListChanged,如果您添加,刪除,更改等您的IBindingList實現者,則爲 。 這樣,只要您用來綁定到您的 組合框的基礎源發生更改,相應的UI控件(組合框)就會被刷新爲 。

你說你在使用BindingList,事實上你確實得到了組合框以反映添加或刪除項目事件。我認爲你應該以另一種方式更新BindingList中的項目,因爲看起來像正確的BindingList事件不會觸發。

你可以調查,或者簡單地住在重置和重新分配的數據源,我不認爲是太糟糕,你是在Statefull Windows窗體應用程序不在SatetLess Webforms所以你確實有你的對象那裏所有的時間:)

相關問題