none
ComboBox cargado con DataSet paso de texto a un TextBox RRS feed

  • Pregunta

  • Hola, mi problema es simple, tengo en un formulario un ComboBox y un TextBox. El comboBox lo cargo haciendo una consulta a una base de datos access 2010 por medio de oledb y su respectivo DataSet y demases, (La base de datos tiene 3 campos, el primero es ID autoincrementable, el segundo es "campo1" y el tercero es "campo2"). He aqui el codigo:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim tablacb As New DataSet '
            Try
                conexion1.ConnectionString = "Provider=Microsoft.Ace.OLEDB.12.0; Data Source=" & Application.StartupPath & "\DBcomboBox.accdb"
            Catch ex As Exception
                MsgBox("Error al crear la conexión" & ex.Message, MsgBoxStyle.Critical, "Conexión1")
                Exit Sub
            End Try
            conexion1.Open()
            Dim adaptador As New OleDb.OleDbDataAdapter("select campo1 from prueba", conexion1)
            adaptador.Fill(tablacb, "tblcb") 
            Me.Cmbprueba.DataSource = tablacb.Tables("tblcb") 
            Me.Cmbprueba.DisplayMember = "campo1" 
            adaptador = Nothing
            tablacb = Nothing
            conexion1.Close()

        End Sub

    Bien, ahora lo que busco es enviar desde el evento "SelectedIndexChanged" del ComboBox (Cmbprueba) una nueva consulta a la base de datos basado en el texto del combobox cada vez que haga click en el combo y se dispare el evento "SelectedIndexChanged"  y que muestre en el TextBox el "campo2" de la base de datos o en su caso enviar el valor de campo a una variable (objeto) del tipo correspodiente.

    codigo del combobox 

     Private Sub Cmbprueba_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmbprueba.SelectedIndexChanged
            Dim tablaPRB As New DataSet
            Try
                conexion2.ConnectionString = "Provider=Microsoft.Ace.OLEDB.12.0; Data Source=" & Application.StartupPath & "\DBcomboBox.accdb"
            Catch ex As Exception
                MsgBox("Error al crear la conexión" & ex.Message, MsgBoxStyle.Critical, "Conexión2")
                Exit Sub
            End Try
            conexion2.Open()
            Dim adaptador As New OleDb.OleDbDataAdapter("select campo2 from prueba where campo1 = '" & Me.Cmbprueba.SelectedItem.ToString & "';", conexion2)
            adaptador.Fill(tablaPRB, "tblprb")
            Me.TxtCampo2.Text = tablaPRB.Tables("Tblprb").Rows(0).Item("campo2").ToString
            adaptador = Nothing
            tablaPRB = Nothing
            conexion2.Close()
        End Sub

    Se agradece la ayuda


    viernes, 25 de octubre de 2013 7:26

Respuestas

  • En tu form_load agrega esto

    Me.Cmbprueba.ValueMember = "campo2" 

    y en tu método Cmbprueba_SelectedIndexChanged borra todo y simplemente escribe

     Me.TxtCampo2.Text = Me.Cmbprueba.SelectedValue


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta UnknownWebGuy viernes, 8 de noviembre de 2013 4:57
    viernes, 25 de octubre de 2013 13:04

Todas las respuestas

  • En tu form_load agrega esto

    Me.Cmbprueba.ValueMember = "campo2" 

    y en tu método Cmbprueba_SelectedIndexChanged borra todo y simplemente escribe

     Me.TxtCampo2.Text = Me.Cmbprueba.SelectedValue


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta UnknownWebGuy viernes, 8 de noviembre de 2013 4:57
    viernes, 25 de octubre de 2013 13:04
  • Se agradece Sergio tu pronta respuesta pero no me funcionó.

    Solucioné el tema de esta forma

    ---------------------------------------------------------------------------------------------

    Public Class Form1
        Dim conexion1 As New OleDb.OleDbConnection
        Dim conexion2 As New OleDb.OleDbConnection
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim tablacb As New DataSet
            Try
                conexion1.ConnectionString = "Provider=Microsoft.Ace.OLEDB.12.0; Data Source=" & Application.StartupPath & "\DBcomboBox.accdb"
            Catch ex As Exception
                MsgBox("Error al crear la conexión" & ex.Message, MsgBoxStyle.Critical, "Conexión1")
                Exit Sub
            End Try
            conexion1.Open()
            Dim adaptador As New OleDb.OleDbDataAdapter("select campo1 from prueba", conexion1)
            adaptador.Fill(tablacb, "tblcb")
            Me.Cmbprueba.DataSource = tablacb.Tables("tblcb")
            Me.Cmbprueba.DisplayMember = "campo1"
            adaptador = Nothing
            tablacb = Nothing
            conexion1.Close()
        End Sub

        Private Sub Cmbprueba_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmbprueba.SelectedIndexChanged
            Dim tablaPRB As New DataSet
            Try
                conexion2.ConnectionString = "Provider=Microsoft.Ace.OLEDB.12.0; Data Source=" & Application.StartupPath & "\DBcomboBox.accdb"
            Catch ex As Exception
                MsgBox("Error al crear la conexión" & ex.Message, MsgBoxStyle.Critical, "Conexión2")
                Exit Sub
            End Try
            conexion2.Open()
            Dim adaptador As New OleDb.OleDbDataAdapter("select campo2 from prueba where campo1 = '" & Me.Cmbprueba.Text & "';", conexion2)
            adaptador.Fill(tablaPRB, "tblprb")
            If tablaPRB.Tables("tblprb").Rows.Count > 0 Then
                Me.TxtCampo2.Text = tablaPRB.Tables("Tblprb").Rows(0).Item("campo2").ToString
            End If
            adaptador = Nothing
            tablaPRB = Nothing
            conexion2.Close()
        End Sub
    End Class

    -----------------------------------------------------------------------------------------------------

    El problema se genera el dispararse el evento:

    "Cmbprueba_SelectedIndexChanged"

    cuando se carga el formulario y se llena el ComboBox, ya que el primer valor que carga en este es: 

    "System.Data.DataRowView"

    este valor no lo encuentra en la BD al momento de hacer la consulta SQL

    "select campo2 from prueba where campo1 = '" & Me.Cmbprueba.Text & "' 

    en el evento: 

    "Cmbprueba_SelectedIndexChanged"

    y Visual lanza error "No hay ninguna fila en la posición 0."

    ...luego de esto carga los registros del "campo1"

    la solucion fue:

    "If tablaPRB.Tables("tblprb").Rows.Count > 0 Then
        Me.TxtCampo2.Text = tablaPRB.Tables("Tblprb").Rows(0).Item("campo2").ToString
    End If"

    dentro del evento 

    "Cmbprueba_SelectedIndexChanged"

    Saludos y gracias nuevamente por tu pronta ayuda y buena voluntad Sergio


    sábado, 26 de octubre de 2013 6:18