2011-02-27 16 views
8
int[] arr = int[100]; 
listBox1.DataSource = arr; 
void ComboBox1SelectedIndexChanged(object sender, EventArgs e) 
{ 
    .....//some processes 
    listBox1.DataSource = null; 
    listBox1.DataSource = arr; 
} 

is not working, 

anche,listbox Refresh() in C#

listBox1.Refresh(); is not working, 

anche,

listBox1.Update(); is not working, 


So che posso usare BindingList<T> ma devo lavorare solo con array.

puoi aiutarmi come posso aggiornare listbox?

risposta

0

provare le seguenti

listBox1.DataBind() 
+0

forse lavorare su .NET 3.5 e più volte, ad esempio, c'è un modo per aggiornare il .NET 2.0 – ocanal

+7

Ci non è DataBind() in .NET 4.0 – fnc12

0

Usa BeginUpdate e EndUpdate, che dovrebbe risolverlo. Non c'è bisogno di impostare la sorgente dati due volte

listBox1.BeginUpdate(); 

listBox1.DataSource = myList; 

listBox1.EndUpdate(); 
+0

, non funziona anche. – ocanal

1

bene, senza vincolante Ho solo riuscito con:

this.Hide(); 
this.Show(); 

si ridisegna tutto ...

2

riuscito a fare solo con

FirstListBox.DataContext = null; 
FirstListBox.DataContext = App.ViewModel; 

Semplicemente perde il collegamento e recupera tutti i dati.

0

Ho ereditato ListBox e aggiunto un metodo pubblico chiamando RefreshItems() che fa ciò che vogliamo. Già implementato e tutto. Non so perché non hanno inserito un metodo pubblico.

10

la mia prima risposta allo scambio di stack qui.

C# .Net 4.0:

listBox1.DataSource = null; 
listBox1.DataSource = names; 

ho notato che l'impostazione l'origine dati per la prima volta, si rinfresca. Quando è impostato, e si prova a impostarlo nuovamente, non si aggiorna.

Quindi l'ho reso nulla, lo ho impostato sullo stesso e visualizzato correttamente per me con questo problema.

+1

Questa dovrebbe essere la risposta accettata. – Kehlan

1

Il problema potrebbe provenire da ListBox SelectionMode.

Per un motivo che non conosco, il database non funziona quando SelectionMode è SelectionMode.None.

Una soluzione potrebbe essere:

listBox.SelectionMode = SelectionMode.MultiExtended; 
listBox.DataSource = myDatasource; 
listBox.SelectionMode = SelectionMode.None; 

Speranza che aiuta.

+0

Grazie - ho cercato per anni, .. questo era il mio problema. Microsoft succhia davvero! –

0

I moduli di Windows per vedere le modifiche soprattutto su Listbox e altri controlli prima che il caricamento sia terminato sono complicati. Per vedere i dati come usati caricati invalidate(); quindi Update();

2

ListBox aggiorna solo il contenuto mostrato quando l'oggetto che è vincolato su dataSource segnala le proprie modifiche. l'oggetto BindingSource ha un evento chiamato DataSourceChanged. quando la Sorgente viene cambiata in un oggetto diverso, la Listbox si aggiornerà automaticamente. Stessa cosa quando si associa una lista. Non succederà nulla se si modifica l'Elenco, poiché l'Elenco non notifica che è stato modificato. Esiste una soluzione semplice per questo problema: utilizzare BindingList http://msdn.microsoft.com/de-de/library/ms132679%28v=vs.110%29.aspx

BindingList ha l'evento ListChanged chiamato ogni volta quando viene modificato l'elenco (ovviamente). Quindi gli oggetti DataBindings di Windows.Form usano eventi come ListChanged per aggiornarsi. Una semplice lista non supporta questo evento.

Quindi, se si desidera lavorare con un sacco di associazioni di dati che è necessario conoscere: http://msdn.microsoft.com/de-de/library/system.componentmodel.inotifypropertychanged%28v=vs.110%29.aspx

+0

Ma ci sono abbastanza casi in cui non si desidera aggiornare il BindingList esistente, ma sostituirlo con un altro. Quindi non si aggiornerà automaticamente, poiché il DataSource punta ancora a quello vecchio. – Binarian