2012-12-30 15 views
5

Mam dużo googlowałem. Znalazłem też dużo. Niestety nic nie jest proste, łatwe i co najważniejsze, proste. Chcę, żeby jakiś facet napisał method, który pobiera List<string> i usuwa poprzedni Items, a następnie ustawia ten List<string>.Odśwież elementy ComboBox, najprostszy sposób

Obecnie mam metodę, ale nie jest wolna od błędów.

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

Może przydatny chociaż nie co prosiłeś (w zależności od tego, co chcesz robić w większy obraz): observale zbiory vs Lists rodzajowych .. http://www.codeproject.com/Articles/42536/ List-vs-ObservableCollection-vs-INotifyPropertyCha –

Odpowiedz

4

Nie trzeba albumList.Items.Clear();

Ten kod działa dobrze

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

Nowe pozycje nie pojawiają się na liście. –

+0

Czy możesz pokazać więcej kodu, ponieważ próbowałem i zadziałało – phnkha

+0

Tak, zadziałało. Nie zresetowałem poprzedniej listy. Teraz robię 'list = null;', a następnie 'list = new List ();' następnie wywołuję 'refreshList (list);'. Więc działa. Dziękuję :) –

4

Po podłączeniu do źródła danych nie działa Items.Clear();. To powinno być:

albumList.DataSource = list; 

lub mieć pewność:

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

Poprzednie elementy nie są usuwane w ten sposób. Zamiast tego nowe elementy dołączane są do poprzednich. –

12

Dla ktoś jeszcze zastanawiał.

Możesz użyć BindlingList i BindingSource.

Dodajesz wszystkie pozycje do swojej listy obecności i zostaną one automatycznie zaktualizowane w Twoim comboboxie.

Jeśli chcesz sortowalny combobox możesz skonstruować BindingList z kontenerem dziedziczącym z IList, jak List, który ma funkcję sortowania. Następnie możesz posortować to odwołanie IList i zostanie ono ponownie odzwierciedlone w bloku combobox.

+1

Jest jeszcze jeden problem z tym; Jeśli ustawisz listę powiązań jako źródło do edytowalnej siatki, a ta sama lista powiązań będzie używana w innej formie tylko do wyświetlenia; edycja elementu w siatce nie odświeży elementów w innej formie. Tak więc, aby ukończyć twoją odpowiedź; W przypadku, które opisałem, po prostu użyj 'BindingList.ResetBindings();' , aby odświeżyć elementy we wszystkich kontrolkach, które używają listy powiązań. – Jinx

+0

Tak, to jedno zastrzeżenie. Dzięki! – Fdej

+0

Dziękuję bardzo za opublikowanie tego !!! Sprawdzałem to przez 3 godziny i czytałem kilkanaście postów, blogów i artykułów MSDN. Cieszę się, że zakończyła się prostą poprawką, a nie tym, co polecało wiele z tych zasobów :)! – christopheralan88

0

Jeśli korzystasz z DataSource, musisz wyczyścić elementy, aby pojawiła się nowa lista. Ponieważ nie można usunąć podczas korzystania z DataSource, należy najpierw ustawić wartość null.

albumList.DataSource = null; 
albumList.Items.Clear(); 
albumList.DataSource = list; 
Powiązane problemy