none
Recorrer un Listbox RRS feed

  • Pregunta

  • Estimados, nuevamente con problemas, 

    tengo un listbox al cual le voy cargando items desde un combobox que previamente lleno desde una tabla de la base de datos.

    El listbox lo cargo de la siguiente manera 

    Private Sub cboadicionales_SelectionChangeCommitted

            Dim dt = DirectCast(lstadicionales.DataSource, DataTable)
            Dim dtSource = DirectCast(CType(sender, ComboBox).DataSource, DataTable)

            If dt Is Nothing Then dt = dtSource.Clone()

            Dim dr = dtSource.Select(String.Format("id_adicional = {0}", CType(sender, ComboBox).SelectedValue))(0)

            dt.ImportRow(dr)

            lstadicionales.DataSource = Nothing
            lstadicionales.DisplayMember = "adi_nombre"
            lstadicionales.DataSource = dt

    Me va cargando el listbox a medida que haga click en un item del combobox.

    Ahora mi problema es al momento de hacer el insert en la base de datos, quiero agarrar el contenido que haya quedado en el listbox e insertarlo en modo texto.

    Estoy usando parametros:

    adicionales.dbtype = dbtype.string

    adicionales.value = ??????????????????????????????

    Donde estan los signos de ?? es donde deberia de poner el resultado del recorrido que le haga al listbox, pero no se como recorrerlo de la manera que lo estoy llenando.

    Espero puedan ayudarme, me urge bastante ya que necesito entregarlo en estos dias! 

    Saludos, y muchas gracias!

    jueves, 19 de octubre de 2017 23:03

Respuestas

  • El mensaje de la excepción es bastante claro, e imagino tiene que ver con la versión del marco de trabajo de .NET, de tu proyecto, que no permite la sobrecarga del método Join() con un tipo IEnumerable(Of String), queda convertirlo a array.

    Dim dt = DirectCast(lstadicionales.DataSource, DataTable)
    
    Dim Lista = String.Join(", ", dt.AsEnumerable().
    		Select(Function(c) c.Field(Of String)("adi_nombre")).ToArray())


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta MPDV viernes, 20 de octubre de 2017 5:56
    viernes, 20 de octubre de 2017 5:28

Todas las respuestas

  • Puedes volver a recuperar la referencia del origen de datos, por ejemplo:

    Dim dt = DirectCast(lstadicionales.DataSource, DataTable)
    
    For Each Row As DataRow In dt.Rows
    	MessageBox.Show(Row.Field(Of String)("adi_nombre"))
    Next


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    viernes, 20 de octubre de 2017 0:42
  • Puedes volver a recuperar la referencia del origen de datos, por ejemplo:

    Dim dt = DirectCast(lstadicionales.DataSource, DataTable)
    
    For Each Row As DataRow In dt.Rows
    	MessageBox.Show(Row.Field(Of String)("adi_nombre"))
    Next


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.

    Probe ese codigo y funciona bien, pero necesito guardar "adi_nombre" en una variable, y que me los concatene.

    Por ejemplo, "gps, internet"

    Probé agregándole esto a tu solución, pero solo me guarda el ultimo:

    For Each Row As DataRow In dt.Rows
                MessageBox.Show(Row.Field(Of String)("adi_nombre"))
                adis = (Row.Field(Of String)("adi_nombre"))
            Next

    viernes, 20 de octubre de 2017 3:57
  • En lugar del operador '=' debiste haber usado el operador '+=' para acumular el valor del elemento actual y un separador. Otra forma puede ser:

    Dim dt = DirectCast(lstadicionales.DataSource, DataTable)
    
    Dim Lista = String.Join(", ", dt.AsEnumerable().Select(Function(c) c.Field(Of String)("adi_nombre")))



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    viernes, 20 de octubre de 2017 4:09
  • En lugar del operador '=' debiste haber usado el operador '+=' para acumular el valor del elemento actual y un separador. Otra forma puede ser:

    Dim dt = DirectCast(lstadicionales.DataSource, DataTable)
    
    Dim Lista = String.Join(", ", dt.AsEnumerable().Select(Function(c) c.Field(Of String)("adi_nombre")))



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    Esa ultima opcion me devuelve el siguiente error: Error 1 Un valor de tipo 'System.Data.EnumerableRowCollection(Of String)' no se puede convertir en '1-matriz dimensional de String'. F:\Programa v4.0 v4\Programa v4.0\Programa v4.0\Reserva y Alquiler\frm-reservanueva.vb 331 39 Programa v4.0
    viernes, 20 de octubre de 2017 4:43
  • El mensaje de la excepción es bastante claro, e imagino tiene que ver con la versión del marco de trabajo de .NET, de tu proyecto, que no permite la sobrecarga del método Join() con un tipo IEnumerable(Of String), queda convertirlo a array.

    Dim dt = DirectCast(lstadicionales.DataSource, DataTable)
    
    Dim Lista = String.Join(", ", dt.AsEnumerable().
    		Select(Function(c) c.Field(Of String)("adi_nombre")).ToArray())


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta MPDV viernes, 20 de octubre de 2017 5:56
    viernes, 20 de octubre de 2017 5:28