none
modificare check su checkedlist box RRS feed

  • Domanda

  • Ciao a tutti,
    col codice che segue popolo una CheckedListBox tramite una data table impostanto tutti gli elementi senza segno di spunta

    Me.CheckedListBoxFasiGF.DataSource = dt
    Me.CheckedListBoxFasiGF.DisplayMember = dt.Columns("DescrizioneBreve").ToString
    Me.CheckedListBoxFasiGF.ValueMember = dt.Columns("ID").ToString
    Dim i As Integer = 0
    For i = 0 To Me.CheckedListBoxFasiGF.Items.Count - 1
          Me.CheckedListBoxFasiGF.SetItemChecked(i, False)
    Next


    successivamente ricevo una lista di ID e devo andare a mettere i segni di spunta sui corrispondenti elementi della CheckedListBox

    Cerco di farlo col codice che segue:

           Dim fasi As String() = {"10", "12", "20"}
                For i As Integer = 0 To fasi.Length - 1
                    x = -1
                    For Each elemento As DataRowView In Me.CheckedListBoxFasiGF.Items
                        x += 1
                        Dim riga As DataRow = elemento.Row
                        Dim IDFase As String = riga("ID").ToString
                        If IDFase = fasi(i).ToString Then
                            Me.CheckedListBoxFasiGF.SetItemChecked(x, True)
                        Else
                            Me.CheckedListBoxFasiGF.SetItemChecked(x, False)
                        End If
                    Next
                Next

    Ma si solleva la seguente eccezione:

    L'elenco a cui è associato l'enumeratore è stato modificato. L'enumeratore può essere utilizzato solo se l'elenco rimane costante.

    Come posso risolvere???

    Grazie 1000.

    Beppe

    sabato 16 novembre 2019 10:50

Risposte

  •         Dim fasi As Integer() = {1, 5, 12}
            For i As Integer = 0 To fasi.Length - 1
                For x = 0 To Me.CheckedListBoxFasiGF.Items.Count - 1
                    Dim dtrv As DataRowView = CType(CheckedListBoxFasiGF.Items(x), DataRowView)
                    Dim dtr As DataRow = dtrv.Row
                    Dim dtrValueMember As String = dtr(CheckedListBoxFasiGF.ValueMember).ToString()
                    If dtrValueMember = fasi(i) Then
                        Me.CheckedListBoxFasiGF.SetItemChecked(x, True)
                    End If
                Next
            Next

    oppure

            Dim fasi As Integer() = {1, 5, 12}
            For i As Integer = 0 To fasi.Length - 1
                For x = 0 To Me.CheckedListBox1.Items.Count - 1
                    Dim dtrv As DataRowView = CType(CheckedListBox1.Items(x), DataRowView)
                    If dtrv("ID") = fasi(i) Then
                        Me.CheckedListBox1.SetItemChecked(x, True)
                    End If
                Next
            Next

    • Modificato patel45 domenica 17 novembre 2019 11:39
    • Contrassegnato come risposta Beppe1964 domenica 17 novembre 2019 17:26
    domenica 17 novembre 2019 10:06

Tutte le risposte

  • ho capito poco, potresti postare un link ad un progetto di esempio ?
    sabato 16 novembre 2019 19:19
  • Ciao Patel45,

    grazie per la risposta.

    Ho preparato un progetto di esempio, lo trovi qui:

    https://drive.google.com/drive/folders/14Y8MdmiR-djQAON6IpG4uiRmgEzzyFAH?usp=sharing

    Buona giornata.

    Beppe

    domenica 17 novembre 2019 07:35
  • a me sembra che tu abbia complicato moltissimo il codice, così funziona

                Dim fasi As Integer() = {3, 5, 9}
                For i As Integer = 0 To fasi.Length - 1
                    For x = 1 To Me.CheckedListBoxFasiGF.Items.Count
                        If x = fasi(i) Then
                            Me.CheckedListBoxFasiGF.SetItemChecked(x - 1, True)
                        End If
                    Next
                Next

    domenica 17 novembre 2019 08:32
  • Ciao Patel45,

    grazie per la risposta.

    Scusa ma ho fatto un esempio non calzante.

    Io devo mettere il segno di spunta agli elementi che hanno id = a 3 o 5 o 9 ma la data table che fa da sorgente alla checked list box potrebbe essere fatta così:

    dt.Rows.Add(3, "FASE TRE")
    dt.Rows.Add(4, "FASE QUATTRO")
    dt.Rows.Add(5, "FASE CINQUE")
    dt.Rows.Add(6, "FASE SEI")
    dt.Rows.Add(9, "FASE NOVE")
    dt.Rows.Add(1, "FASE UNO")
    dt.Rows.Add(2, "FASE DUE")
    dt.Rows.Add(22, "FASE VENTIDUE")
    dt.Rows.Add(23, "FASE VENTITRE")
    dt.Rows.Add(30, "FASE TRENTA")

    La ricerca non è posizionale ma per valore dell'id. Nella base dati da cui leggo gli id potrei trovare 1, 2, 3, 7, 12, 44, 45, 50, ......

    Ciao

    Beppe

    domenica 17 novembre 2019 08:46
  •         Dim fasi As Integer() = {1, 5, 12}
            For i As Integer = 0 To fasi.Length - 1
                For x = 0 To Me.CheckedListBoxFasiGF.Items.Count - 1
                    Dim dtrv As DataRowView = CType(CheckedListBoxFasiGF.Items(x), DataRowView)
                    Dim dtr As DataRow = dtrv.Row
                    Dim dtrValueMember As String = dtr(CheckedListBoxFasiGF.ValueMember).ToString()
                    If dtrValueMember = fasi(i) Then
                        Me.CheckedListBoxFasiGF.SetItemChecked(x, True)
                    End If
                Next
            Next

    oppure

            Dim fasi As Integer() = {1, 5, 12}
            For i As Integer = 0 To fasi.Length - 1
                For x = 0 To Me.CheckedListBox1.Items.Count - 1
                    Dim dtrv As DataRowView = CType(CheckedListBox1.Items(x), DataRowView)
                    If dtrv("ID") = fasi(i) Then
                        Me.CheckedListBox1.SetItemChecked(x, True)
                    End If
                Next
            Next

    • Modificato patel45 domenica 17 novembre 2019 11:39
    • Contrassegnato come risposta Beppe1964 domenica 17 novembre 2019 17:26
    domenica 17 novembre 2019 10:06
  • Perfetto!

    Sinceramente non capisco bene come mai così funziona, è un argomento che dovrò approfondire....

    Comunque sia grazie 1000!

    Buona giornata.

    Beppe

    domenica 17 novembre 2019 14:24
  • se la mia risposta risolve il tuo problema contrassegnala come risposta
    domenica 17 novembre 2019 16:41
  • Fatto!

    Grazie ancora.

    ciao

    Beppe

    domenica 17 novembre 2019 17:27