Ivan Gentile

Office and .NET blog
posts - 24, comments - 0, trackbacks - 2

CheckedListBox in VB.Net

Il controllo CheckedListBox è sicuramente un controllo molto utile …. Specialmente sei microsoft mettesse a disposizione di tutti le “istruzioni esatte” per utilizzarlo.

Microsoft dice di utilizzare il codice seguente per accedere ad un singolo dato di una CheckedListBox:

String s = checkedListBox1.Items[0].ToString()

“SFORTUNATAMENTE QUESTO METODO NON FUNZIONA MAI”

ritorna un errore “System.Data.DataRowView”.

Sarebbe molto interessante anche memorizzare un “identificativo” del dato (come nelle ListBox!!), … ma forse chiediamo troppo!!!

Ovviamente ognuno può inventarsi una soluzione a questo problema. Qui di seguito troverete quella che io ho adottato.

Supponiamo di voler caricare le denominazioni di 10 società dal nostro database ed i loro identificativi in modo da sapere quali vengono “chekkate” e quali no.

Definisco una struttura come segue:

Structure Dato

         Friend Id as Integer

         Friend Descrizione as String

         Friend Selezionato as Boolean

End Structure

Ed un vettore:

Dim Lista(9) As Dato

Durante l’evento LOAD del Form carichiamo le informazioni dal database e le carichiamo anche nel vettore:

    Private Sub Form1_Load(ByVal sender As System.Object, _

        ByVal e As System.EventArgs) Handles MyBase.Load

        Dim Query As String

        Using Connessione As New SqlConnection(StringaConnessione)

             Query = "SELECT TOP 10 Descrizione, Id FROM Azienda"

             Dim Command As New SqlCommand(Query, Connessione)

             Connessione.Open()

             Dim Reader As SqlDataReader = Command.ExecuteReader()

             Dim Indice As Integer = 0

             While Reader.Read

                           CheckedListBox1.Items.Add(Reader(0).ToString, False)

                            Lista(Indice).Id = Reader(1).ToString

                            Lista(Indice).Descrizione = Reader(0).ToString

                            Indice = Indice + 1

             End While

        End Using

    End Sub

Ora ho caricato nella mia CheckedListBox e nel mio vettore le informazioni utili.

A questo punto prendo in considerazione l’evento SELECTEDINDEXCHANGED della CheckedListBox e aggiungo quanto segue:

    Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As _

        System.Object, ByVal e As System.EventArgs) Handles _ CheckedListBox1.SelectedIndexChanged

                  Lista(CheckedListBox1.SelectedIndex).Selezionato = Not _

                            Lista(CheckedListBox1.SelectedIndex).Selezionato

    End Sub

Ora abbiamo nel vettore tutte le informazioni che ci servono.

Ciao

Ivan

?>

posted on sabato 28 gennaio 2006 19.52