2012-12-30 25 views
5

Çok fazla googled ettik. Çok da bulundu. Ne yazık ki hiçbir şey düz, kolay ve en önemlisi basittir. Ben bir adam bir List<string> alır ve önceki Items kaldırır bir method yazmak istiyorum, sonra bu List<string> ayarlayın.ComboBox Öğelerini Yenile En kolay yolu

Şuanda bir yöntemim var ancak hata içermiyor.

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

Belki kullanışlı olmasa ne (daha büyük resimde ne yapmak istediğinize bağlı olarak) istedi: jenerik Listeler vs observale koleksiyonları .. http://www.codeproject.com/Articles/42536/ List-vs-ObservableCollection-vs-INotifyPropertyCha –

cevap

4

Sen) (albumList.Items.Clear gerekmez;

Bu kod

herkes hala merak için

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

Yeni öğeler listede görünmüyor. –

+0

Kodunuzdan daha fazlasını gösterebilirim çünkü denedim ve – phnkha

+0

çalıştım Evet işe yaradı. Önceki listeyi sıfırlamadım. Şimdi, ben 'list = null' 'yapıyorum ve' list = new List (); 'sonra refreshList (liste); Yani, onun çalışması. Teşekkür ederim :) –

4

Veri kaynağına bağlandığında, Items.Clear(); çalışmıyor.

albumList.DataSource = list; 

veya emin olmak için: Bu olmalı

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

Önceki öğeler, bu şekilde kaldırılmaz. Aksine, yeni öğeler önceki ile eklenir. –

12

gayet güzel çalışıyor.

BindlingList ve BindingSource kullanabilirsiniz.

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

Tüm öğeleri ciltleme listenize eklersiniz ve bunlar otomatik olarak combobox'ınızda güncellenir.

Sorgulanabilir bir combobox istiyorsanız, BindingList öğesini, bir sort işlevi olan List gibi, IList'ten gelen bir kapsayıcıyla oluşturabilirsiniz. Daha sonra bu IList referansını sıralayabilir ve açılan kutuda tekrar yansıtılacaktır.

+1

Bu hala bir sorun var; BindingList öğesini düzenlenebilir bir ızgaraya kaynak olarak ayarlarsanız ve aynı BindingList (referans olarak) yalnızca görüntülemek için başka bir biçimde kullanılır; öğeyi ızgarada düzenlemek, öğeleri başka bir biçimde yenilemez. Yani cevabınızı tamamlamak için; Tanımladığım durumda, ciltleme listesini kullanan tüm kontrollerdeki öğeleri yenilemek için 'BindingList.ResetBindings();' kullanın. – Jinx

+0

Evet, bu bir uyarıdır. Teşekkürler! – Fdej

+0

Bunu gönderdiğiniz için çok teşekkürler! Bunu 3 saat boyunca araştırdım ve bir düzine yayın, blog ve MSDN makalesi okudum. Bu kaynakların birçoğunun tavsiye ettiği şeyden ziyade böyle basit bir düzeltmeyle sonuçlandığına sevindim :)! – christopheralan88

0

DataSource kullanıyorsanız, yeni listenin görünmesi için öğeleri temizlemeniz gerekir. DataSource kullanırken temizleyemediğinizden, önce null olarak ayarlamanız gerekir.

albumList.DataSource = null; 
albumList.Items.Clear(); 
albumList.DataSource = list; 
İlgili konular