2012-12-30 49 views
5

我google了很多。也發現了很多。不幸的是,沒有什麼是直接,簡單,最重要的是,簡單。我想要一些人寫一個method,需要一個List<string>並刪除以前的Items,然後設置這個List<string>刷新組合框項目,最簡單的方法

目前我有一個方法,但它不是沒有錯誤的。

public void refreshList(List<string> list){ 
    albumList.Items.Clear(); 
    albumList.DataSource = list; 
} 
+0

也許有用,雖然不是你要的(取決於你想在更大的畫面做什麼):observale集合和泛型列表.. http://www.codeproject.com/Articles/42536/ List-vs-ObservableCollection-vs-INotifyPropertyCha –

回答

4

你不需要albumList.Items.Clear();

此代碼工作得很好

public void refreshList(List<string> list){ 
    albumList.DataSource = list; 
} 
+4

新項目不會出現在列表中。 –

+0

你可以展示更多的代碼嗎?因爲我試過了,它能工作 – phnkha

+0

是的,它工作。我沒有重置之前的列表。現在,我正在做'list = null;'然後'list = new List ();'然後我調用'refreshList(list);'。所以,它的工作。謝謝:) –

4

當綁定到數據源時,Items.Clear();不起作用。這應該是:

albumList.DataSource = list; 

還是要肯定的是:

albumList.DataSource = null; 
albumList.DataSource = list; 
+1

這種方式不會刪除以前的項目。相反,新項目會附加上一個。 –

12

對於任何人仍然不知道。

您可以使用BindlingList和BindingSource。

BindingList<YOUR_CLASS_TYPE> bindinglist = new BindingList<YOUR_CLASS_TYPE>() 
BindingSource bSource = new BindingSource(); 
bSource.DataSource = bindinglist; 
ComboBox.DataSource = bSource; 

您將所有項目添加到您的綁定列表中,它們將在您的組合框中自動更新。

如果你想要一個可排序的組合框,你可以用一個從IList繼承的容器來構造BindingList,比如帶有排序函數的List。然後,您可以對該IList參考進行排序,並將在組合框內再次進行反射。

+1

這仍然有一個問題; 如果您將BindingList設置爲可編輯網格的源,並且相同的BindingList(通過引用)將以另一種形式用於顯示;編輯網格中的項目不會刷新其他形式的項目。 所以只是爲了完成你的答案;在我描述的情況下,只需使用 'BindingList.ResetBindings();' 刷新所有使用綁定列表的控件中的項目。 – Jinx

+0

是的,這是一個警告。謝謝! – Fdej

+0

非常感謝你發佈這個!我已經研究了3個小時,並閱讀了十多篇文章,博客和MSDN文章。我很高興它結束了這樣一個簡單的修復,而不是很多這些資源推薦:)! – christopheralan88

0

如果您使用的是數據源,則需要清除要顯示的新列表的項目。 由於使用DataSource時無法清除,因此需要先將其設置爲空。

albumList.DataSource = null; 
albumList.Items.Clear(); 
albumList.DataSource = list;