none
Pasar items seleccionados de un checkedlistbox a una variable

    Pregunta

  • Hola a todos:

    Tengo un problemilla (tonto) ya que resulta que no me aclaro en como pasar los items seleccionados de un checkedlistbox1 a unas variables string.

    Necesito guardar por separado, el valor de cada item seleccionado y no en conjunto como me lo da ahora, que ya me va bien, pero también necesito tener la cadena que devuelve la instrucción separando cada item seleccionado.

                 'Obtener las empresas desde las que se sumarán los balances.
                For i = 0 To cboTablas.Items.Count - 1
                    If CBool(CheckedListBox1.GetItemChecked(CInt(i))) Then
                        'codigos de empresas seleccionadas.
                        empresasO = empresasO & "'" & cboTablas.Items(CInt(i)).ToString & "',"
                    End If
                Next
    

    Es decir, la variable string "empresaso), por ejemplo devuelve la cadena de todos los items marcado, "001","003","006", pues bien, cada uno de esos items precisaría tenerlo en unas variables, por ejemplo:

    itemMarcado(0) = "001"

    ItemMarcado(1) = "003"

    ItemMarcado(2) = "006"

    Bueno, pues no me aclaro en poder dar esos valores a las variables.

    Un saludo a todos.

    Gemma

    domingo, 5 de marzo de 2017 9:03

Respuestas

  • Hola:
    A ver si este ejemplo te puede ayudar
    En un Form como el de la imagen, copia y pega el siguiente código

    Public Class Form1
        Private moDataTable As New DataTable
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            'Añadimos las columnas.
            moDataTable.Columns.Add(New DataColumn("Id", Type.GetType("System.Int16")))
            moDataTable.Columns.Add(New DataColumn("Nombre", Type.GetType("System.String")))
            moDataTable.Columns.Add(New DataColumn("Seleccionado", Type.GetType("System.Boolean")))
            'Llenar datos
            Dim lDataRow As DataRow = moDataTable.NewRow
            ' Añadimos los datos
            lDataRow.Item("Id") = 1
            lDataRow.Item("Nombre") = "PRIMERO"
            lDataRow.Item("Seleccionado") = False
            ' Agregamos el registros a la colección Rows
            moDataTable.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable.NewRow
            lDataRow.Item("Id") = 2
            lDataRow.Item("Nombre") = "SEGUNDO"
            lDataRow.Item("Seleccionado") = False
            moDataTable.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable.NewRow
            lDataRow.Item("Id") = 3
            lDataRow.Item("Nombre") = "TERCERO"
            lDataRow.Item("Seleccionado") = False
            moDataTable.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable.NewRow
            lDataRow.Item("Id") = 4
            lDataRow.Item("Nombre") = "CUARTO"
            lDataRow.Item("Seleccionado") = False
            moDataTable.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable.NewRow
            lDataRow.Item("Id") = 5
            lDataRow.Item("Nombre") = "QUINTO"
            lDataRow.Item("Seleccionado") = False
            moDataTable.Rows.Add(lDataRow)
            '
            Me.DataGridView1.DataSource = moDataTable
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim Lista As New List(Of String)
            For Each Fila As DataGridViewRow In Me.DataGridView1.Rows
                If CBool(Fila.Cells("Seleccionado").Value) = True Then
                    Lista.Add(CStr(Fila.Cells("Nombre").Value))
                End If
            Next
            For Each lsItem As String In Lista
                Me.TextBox1.Text &= lsItem & ","
            Next
            Me.TextBox1.Text = Me.TextBox1.Text.Substring(0, Me.TextBox1.Text.Length - 1)
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta gemma_campillo domingo, 5 de marzo de 2017 10:13
    domingo, 5 de marzo de 2017 9:36
  • Hola querido Carlos, gracias por responder.

    Mira, al final lo he arreglado con la función split-

     'Obtener las empresas desde las que se sumarán los balances.
                For i = 0 To cboTablas.Items.Count - 1
                    If CBool(CheckedListBox1.GetItemChecked(CInt(i))) Then
                        'codigos de empresas seleccionadas.
                        empresasO = empresasO & "'" & cboTablas.Items(CInt(i)).ToString & "',"
                    End If
                Next
    
                Dim cadena As String = empresasO
    
                Dim empresitas As String() = cadena.Split(","c)
                EmpresaSeleccionda(0) = empresitas(0)
                EmpresaSeleccionda(1) = empresitas(1)
                EmpresaSeleccionda(2) = empresitas(2)

    De cualquier forma, he probado tu código y también me va perfectamente., opto por el otro que me es más cortito.

    Bueno Carlos, un abrazo y muchas gracias como siempre,

    Gemma

    domingo, 5 de marzo de 2017 10:13

Todas las respuestas

  • Hola:
    A ver si este ejemplo te puede ayudar
    En un Form como el de la imagen, copia y pega el siguiente código

    Public Class Form1
        Private moDataTable As New DataTable
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            'Añadimos las columnas.
            moDataTable.Columns.Add(New DataColumn("Id", Type.GetType("System.Int16")))
            moDataTable.Columns.Add(New DataColumn("Nombre", Type.GetType("System.String")))
            moDataTable.Columns.Add(New DataColumn("Seleccionado", Type.GetType("System.Boolean")))
            'Llenar datos
            Dim lDataRow As DataRow = moDataTable.NewRow
            ' Añadimos los datos
            lDataRow.Item("Id") = 1
            lDataRow.Item("Nombre") = "PRIMERO"
            lDataRow.Item("Seleccionado") = False
            ' Agregamos el registros a la colección Rows
            moDataTable.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable.NewRow
            lDataRow.Item("Id") = 2
            lDataRow.Item("Nombre") = "SEGUNDO"
            lDataRow.Item("Seleccionado") = False
            moDataTable.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable.NewRow
            lDataRow.Item("Id") = 3
            lDataRow.Item("Nombre") = "TERCERO"
            lDataRow.Item("Seleccionado") = False
            moDataTable.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable.NewRow
            lDataRow.Item("Id") = 4
            lDataRow.Item("Nombre") = "CUARTO"
            lDataRow.Item("Seleccionado") = False
            moDataTable.Rows.Add(lDataRow)
            '
            lDataRow = moDataTable.NewRow
            lDataRow.Item("Id") = 5
            lDataRow.Item("Nombre") = "QUINTO"
            lDataRow.Item("Seleccionado") = False
            moDataTable.Rows.Add(lDataRow)
            '
            Me.DataGridView1.DataSource = moDataTable
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim Lista As New List(Of String)
            For Each Fila As DataGridViewRow In Me.DataGridView1.Rows
                If CBool(Fila.Cells("Seleccionado").Value) = True Then
                    Lista.Add(CStr(Fila.Cells("Nombre").Value))
                End If
            Next
            For Each lsItem As String In Lista
                Me.TextBox1.Text &= lsItem & ","
            Next
            Me.TextBox1.Text = Me.TextBox1.Text.Substring(0, Me.TextBox1.Text.Length - 1)
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta gemma_campillo domingo, 5 de marzo de 2017 10:13
    domingo, 5 de marzo de 2017 9:36
  • Hola querido Carlos, gracias por responder.

    Mira, al final lo he arreglado con la función split-

     'Obtener las empresas desde las que se sumarán los balances.
                For i = 0 To cboTablas.Items.Count - 1
                    If CBool(CheckedListBox1.GetItemChecked(CInt(i))) Then
                        'codigos de empresas seleccionadas.
                        empresasO = empresasO & "'" & cboTablas.Items(CInt(i)).ToString & "',"
                    End If
                Next
    
                Dim cadena As String = empresasO
    
                Dim empresitas As String() = cadena.Split(","c)
                EmpresaSeleccionda(0) = empresitas(0)
                EmpresaSeleccionda(1) = empresitas(1)
                EmpresaSeleccionda(2) = empresitas(2)

    De cualquier forma, he probado tu código y también me va perfectamente., opto por el otro que me es más cortito.

    Bueno Carlos, un abrazo y muchas gracias como siempre,

    Gemma

    domingo, 5 de marzo de 2017 10:13