2012-12-30 9 views
5

Ho cercato su Google molto. Trovato molto pure. Sfortunatamente niente è semplice, facile e, soprattutto, semplice. Voglio che un ragazzo scriva un method che prende uno List<string> e rimuove il precedente Items, quindi imposta questo List<string>.Aggiorna elementi ComboBox, modo più semplice

Attualmente ho un metodo ma non è privo di errori.

+0

Forse utile anche se non quello che hai chiesto (a seconda di cosa si vuole fare nel quadro più ampio): collezioni observale vs liste generiche .. http://www.codeproject.com/Articles/42536/ List-vs-ObservableCollection-vs-InotifyPropertyCha –

risposta

4

Non è necessario albumList.Items.Clear();

Questo codice funziona bene

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

I nuovi elementi non compaiono nell'elenco. –

+0

Puoi mostrare altro codice perché ho provato e ha funzionato – phnkha

+0

Sì, ha funzionato. Non ho ripristinato la lista precedente. Ora, sto facendo 'list = null;' e poi 'list = new List ();' quindi chiamo 'refreshList (list);'. Quindi, sta funzionando. Grazie :) –

4

Se collegato a un'origine dati, Items.Clear(); non funziona. Questo dovrebbe essere:

albumList.DataSource = list; 

o per essere sicuri:

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

Gli elementi precedenti non vengono rimossi, in questo modo. Piuttosto, i nuovi elementi sono aggiunti al precedente. –

12

Per chiunque ancora chiedendo.

È possibile utilizzare un BindlingList e BindingSource.

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

Aggiungete tutti gli elementi alla vostra lista di rilegatura e saranno automaticamente aggiornati all'interno della vostra casella combinata.

Se si desidera una combobox ordinabile, è possibile creare BindingList con un contenitore che eredita da IList, come Elenco che ha una funzione di ordinamento. È quindi possibile ordinare quel riferimento IList e verrà riflesso di nuovo all'interno della casella combinata.

+1

C'è ancora un problema con questo; Se si imposta BindingList come sorgente su una griglia modificabile e la stessa BindingList (per riferimento) verrà utilizzata in un altro modulo solo per la visualizzazione; la modifica dell'elemento nella griglia non aggiornerà gli elementi in un altro modulo. Quindi, per completare la risposta; Nel caso che ho descritto, basta usare 'BindingList.ResetBindings();' per aggiornare gli elementi di tutti i controlli che stanno usando l'elenco di rilegature. – Jinx

+0

Sì, questo è un avvertimento. Grazie! – Fdej

+0

Grazie mille per aver postato questo !!! L'ho ricercato per 3 ore e ho letto una dozzina di post, blog e articoli MSDN. Sono contento che sia finita con una semplice soluzione come questa piuttosto che molte di queste risorse che raccomandavano :)! – christopheralan88

0

Se si utilizza DataSource è necessario deselezionare gli elementi per il nuovo elenco da visualizzare. Poiché non è possibile cancellare durante l'uso di DataSource, è necessario prima impostarlo su null.

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