none
No muestra datos control listbox RRS feed

  • Pregunta

  • Hola:

    No entiendo porqué un control listbox no me muestra los datos.

    Los pasos que he seguido y que muestro a continuación son los siguientes:

    1) Verifico que la select lleve registros.

    2) Creo un datatable que asigno como DataSource al listbox.

    3) Relleno el Listbox y lo muestro (Bueno eso es lo que me gustaría, pero no muestra nada).
      Public Shared Sub ExistenRegistrosNoImportados()

            ' Declaramos una variable Connection
            Using cnn As DbConnection = Adaptador.CreateConnection()

                ' Creamos el Commando
                Dim cmd As DbCommand = cnn.CreateCommand()

                cnn.Open()
                cmd.CommandText = "SELECT COUNT(*) FROM ImportacionDatos WHERE Balance is null"

                Dim numReg As Integer = CInt(MetodosDatos.ExecuteScalar(cmd))

                If (numReg = 0) Then
                    RegistrosBalanceNulos = False
                Else
                    RegistrosBalanceNulos = True
                End If

            End Using
        End Sub

        Public Shared Function CargaDatosNoImportados() As DataTable

            ' Declaramos una variable Connection
            Using cnn As DbConnection = da.CreateConnection()

                    ' Creamos el Commando
                    Dim cmd As DbCommand = cnn.CreateCommand()

                    cmd.CommandType = CommandType.Text

                    cnn.Open()

                    cmd.CommandText = "SELECT Cód_GC, SaldoUnificado FROM ImportacionDatos WHERE Balance is null "

                    Return MetodosDatos.EjecutarComandoSelect(cmd)

                End Using

        End Function

        Private Shared Sub MostramosRegistrosNoImportados()

            'Comprobamos si existen registros nulos
            Call ExistenRegistrosNoImportados()

            If RegistrosBalanceNulos = False Then
                Exit Sub
            Else


                Dim listbox1 As New ListBox

                'Limpiamos el control ListBox
                listbox1.DataSource = Nothing

                ' Configuramos el control ListBox
                With listbox1
                    .DataSource = CargaDatosNoImportados()
                    .DisplayMember = "Cód_GC"
                    .ValueMember = "SaldoUnificado"
                End With

            End If

        End Sub

    He pasado un breakpoint por todos sitios para ver el recorrido y es correcto, por otro lado, al menos 1 registro lleva el datatable, por lo que no entiendo que me puede faltar para que lo muestre.

    Un saludo.

    Gemma

    domingo, 4 de junio de 2017 16:13

Respuestas

  • Evita las variables a nivel de clase, el procedimiento de tipo Sub 'ExistenRegistrosNoImportados' debería ser uno de tipo Function que retorne un tipo Boolean y sobre el resultado del mismo evaluar el flujo a tomar.

    'Comprobamos si la consulta de selección retorna filas
    If RegistrosBalanceNulos() Then
    	'Vincular datos al ListBox
    End If

    De hecho no estoy seguro que la validación previa sea necesario o cuanto menos útil, yo la evitaría.

    Respecto al problema que presentas, lamento no poder dar una explicación de la causa (tomo nota de ello para estudiarlo) pero he visto que el orden como se define las propiedades de asignación en algunos casos influye. Intenta cambiar el orden a los siguiente:

    With ListBox1
    	.DisplayMember = "Cód_GC"
    	.ValueMember = "SaldoUnificado"
    
    	.DataSource = CargaDatosNoImportados()
    End With


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 4 de junio de 2017 16:42

Todas las respuestas

  • Evita las variables a nivel de clase, el procedimiento de tipo Sub 'ExistenRegistrosNoImportados' debería ser uno de tipo Function que retorne un tipo Boolean y sobre el resultado del mismo evaluar el flujo a tomar.

    'Comprobamos si la consulta de selección retorna filas
    If RegistrosBalanceNulos() Then
    	'Vincular datos al ListBox
    End If

    De hecho no estoy seguro que la validación previa sea necesario o cuanto menos útil, yo la evitaría.

    Respecto al problema que presentas, lamento no poder dar una explicación de la causa (tomo nota de ello para estudiarlo) pero he visto que el orden como se define las propiedades de asignación en algunos casos influye. Intenta cambiar el orden a los siguiente:

    With ListBox1
    	.DisplayMember = "Cód_GC"
    	.ValueMember = "SaldoUnificado"
    
    	.DataSource = CargaDatosNoImportados()
    End With


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 4 de junio de 2017 16:42
  • Hola Williams:

    Ok. Me tiene amargada el puñetero list box.

    Voy a seguir con ello y a invertir el for.

    Muchas gracias querido amigo como siempre.

    Un abrazo.

    Gemma

    domingo, 4 de junio de 2017 17:01
  • Voy a seguir con ello y a invertir el for.

    ¿Cuál for?. Lo que menciono es que primero establezcas valores a las propiedades DisplayMember y ValueMember y finalmente vincules los datos mediante la propiedad DataSource, ¿lo hiciste?.

    domingo, 4 de junio de 2017 17:40
  • Hola Williams:

    Si, eso hice, me confundí con lo del for, pe continúa sin salir.

    Estoy probando otro código mucho más corto y casi lo tengo, pasa, que tengo que pulsar en el listbox para que aparezca el código inexistente.

    Pero bueno, creo que lo dejo resuelto pronto.

    Gracias, querido amigo.

    Un abrazo.

    Gemma

    domingo, 4 de junio de 2017 18:05