Treeview e Listview

mercoledì 17 settembre 2008 - 12.31

pdbine Profilo | Newbie

Ciao a tutti! Sono una new entry nel mondo di C# ( Al politecnico ho fatto solo C!) e ho un problema da risolvere:

Come faccio a popolare una listview in maniera condizionata alla selezione su un treeview?
La mia idea era quella di controllare la selezione sul treeview dopo l'evento AfterSelect, interrogare un db in base alla selezione fatta, creare una listviewitemcollection e mostrarla sulla listview.
Lasciando per ora stare la parte di interrogazione del db, il mio problema è che ogni volta che cambio la selezione sul treeview, sulla listview vengono aggiunti gli elementi corrispondenti a quelli già visualizzati dopo la selezione precedente.

Cosa posso fare?
Grazie mille!

aiedail92 Profilo | Expert

Ciao

Se non vuoi che restino gli elementi precedenti, devi chiamare (prima di aggiungere quelli nuovi) il metodo tuaListView.Items.Clear.

Luca

pdbine Profilo | Newbie

Ok, sono riuscito a popolarla in maniera condizionata, però mi si è presentato un problema:
Mi genera un'eccezione di tipo 'System.ArgumentOutOfRangeException' sull'istruzione che utilizzo per catturare il testo dell'oggetto selezionato.
Mi spiego meglio: quando seleziono un oggetto la funzione ItemSelectionChanged cattura l'evento e lo mette dentro ad una variabile con questa istruzione:
item = listView1.SelectedItems[0];
Tutto funziona finchè non decido malauguratamente di cambiare selezione, a quel punto mi genera l'eccezione su quella istruzione dicendomi che 0 non è accettato come parametro.
Why?
Grazie!

aiedail92 Profilo | Expert

Ciao

Questo dipende dal fatto che l'evento viene scatenato anche quando l'elemento viene deselezionato. Quando clicki su un elemento, prima viene generato l'evento per la deselezione (quindi SelectedItems ha zero elementi, e se cerchi di accedervi, lancia l'eccezione), poi l'evento viene riscatenato per la nuova selezione.

Per evitare il sollevamento dell'eccezione, usa un codice tipo questo (sempre dal gestore eventi di ItemSelectionChanged):

//Se l'elemento sta venendo selezionato... if (e.IsSelected) { //... imposta l'oggetto selezionato item = e.Item; } else { //Altrimenti imposta l'oggetto selezionato a null item = null; }

Naturalmente poi prima di eseguire qualsiasi funzione su item, devi controllare che non sia null, altrimenti viene sollevata una NullReferenceException.

Luca

pdbine Profilo | Newbie

Grande! Funziona tutto come dovrebbe! Grazie, sei velocissimo a rispondere!
Ciao, Francesco
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5