2011-11-17 11 views
8

Ho un semplice modulo di Windows contenente, tra gli altri componenti, un oggetto ListView denominato list. Nel modulo, un pulsante mi consente di svuotare l'elenco al clic con list.Items.Clear(). Funziona beneSvuota un ListView

Ora ho una classe separata Test, il cui metodo update() viene chiamato su alcuni eventi esterni al modulo. Alla costruzione del modulo, ho passato un riferimento all'elenco usando il metodo SetList. In modalità debug, viene richiamato lo update() sugli eventi che si attivano e il relativo contenuto viene eseguito, ma il mio elenco non viene cancellato.

Perché è questo? Il riferimento è impostato correttamente, ho controllato.

class Test 
{ 
    private ListView list; 

    public void setList(ListView list) 
    { 
     this.list = list; 
    } 

    public void update() 
    { 
     this.list.Items.Clear(); 
    } 
} 

quando guardo più da vicino la mia lista essere modificato inserendo punti di interruzione nel update(), la lista viene pulita e resta pulita. Sembra davvero che sia stata modificata un'altra lista, ma ne ho una sola e non ne faccio mai nessuna nuova ... ????

+1

Se gli elementi associati tramite l'origine dati provano 'list.DataSource = null; list.DataBind(); ' – sll

+0

la mia ipotesi sarebbe che non lo è. Aggiungo sempre tramite il metodo this.list.Items.Add – Jerome

+3

Il 95% di probabilità con codice come questo è che stai cancellando il listview di un'altra istanza di modulo, una che non è visibile perché la hai creata con new invece di usare il istanza di forma visibile. –

risposta

5

Utilizzare il seguito modificata update metodo:

public void update() 
    { 
     this.list.Items.Clear(); 
     this.list.Update(); // In case there is databinding 
     this.list.Refresh(); // Redraw items 
    } 

Se questo non funziona, è evidente che si sta modificando un'altra istanza dell'oggetto list. In questo caso, modificare temporaneamente la dichiarazione dell'oggetto come di seguito e vedere se cambia qualcosa. Se è così, è necessario rivedere il codice per assicurarsi che si sta aprendo la giusta istanza della lista:

private static ListView list; 
0

Nel mio caso, non sto usando associazioni di dati, ma piuttosto aggiungere elementi esplicitamente in un ciclo usando Aggiungi(). Mi è sembrato che ListView.Clear() e ListView.Items.Clear() non funzionassero.

Si scopre che il ListView era effettivamente cancellato, ma non stavo cancellando l'elenco di input, quindi stavo effettivamente cancellando e quindi ri-popolando il ListView con gli elementi precedentemente cancellati.

A volte sono le cose più semplici ... D'OH!

Problemi correlati