Como Llenar 3 combobox dependientes vb.net

Amigos buenos días me podrían ayudar con esto por favor.
Tengo 3 combobox: Departamentos, provincias, distritos. El problema es que a la hora de cargarlos para modificar los datos. Por decir si cargo los datos de un cliente por en los combobox quisiera que me aparezcan los datos que seleccione y guarde en la bd y claro también los combobox con los datos para seleccionar si deseo modificarlos, lo e logrado con el primero pero en los otros 2 ya no me funcionan me podrían dar una manito ahí les dejo los códigos. Gracias.

Sub BUSCA_DIRECCIONES()
        reconectar()
        Dim dt As New DataTable
        'Establecemos la cadena de conexion
        Dim enunciado = New MySqlCommand("Select *from Clientes " & _
                "INNER JOIN direcciones ON Clientes.id_cliente = direcciones.id_cliente " & _
                "INNER JOIN tipo_via ON direcciones.id_via = tipo_via.id_via " & _
                "INNER JOIN tipo_uso ON direcciones.id_uso = tipo_uso.id_uso " & _
                "INNER JOIN distritos ON direcciones.DISTRITO_ID = DISTRITOs.DISTRITO_ID " & _
                "INNER JOIN provincias ON direcciones.provincia_ID = provincias.provincia_ID " & _
                "INNER JOIN departamentos ON direcciones.departamento_ID = departamentos.departamento_ID " & _
               " where ID_direccion='" & Clientes.Lbl_IdDireccion.Text & "'", conex)
        Try
            Dim drd As MySqlDataReader
            drd = enunciado.ExecuteReader()
            If drd.Read Then
                Me.TextBox1.Text = drd.Item("Des_direccion").ToString()
                Me.ComboBox1.SelectedValue = drd.Item("ID_USO").ToString()
                Me.ComboBox2.SelectedValue = drd.Item("ID_VIA").ToString()
                Me.ComboBox3.SelectedValue = drd.Item("DEPARTAMENTO_ID").ToString()
                Drd. Close()
                Conex. Close()
            Else
                Me. Close()
                LIMPIAR()
                Drd. Close()
                Conex. Close()
            End If
        Catch ex As MySqlException
            MsgBox("ERROR DEL SISTEMA" + ex.ToString)
            conex.Close()
        End Try
    End Sub

1 respuesta

Respuesta

Posiblemente no existen items con los valores consultados en el ComboBox por eso no los selecciona. Prueba asignándole el valor o directamente en la propiedad Text del ComboBox o cambia a la propiedad SelectedText...

¡Gracias! Por tu comentario los items si existen de hecho están guardados en la base de datos Te dejo todo el código a ver si me das una manito ya que no se para donde salir.

 Sub Llenar_Cbodepartamentos()
        reconectar()
        Try
            Dim acc As String = "SELECT * FROM DEPARTAMENTOS order by DEPARTAMENTO_descripcion asc"
            Dim Ds As New MySqlDataAdapter(acc, conex)
            Dim Dt As DataTable = New DataTable("DEPARTAMENTOS")
            Ds.Fill(Dt)
            'Dim dr As DataRow = Dt.NewRow
            'dr("DEPARTAMENTO_descripcion") = "SELECCIONE"
            'Dt.Rows.InsertAt(dr, 0)
            With ComboBox3
                .DataSource = Nothing
                .DataSource = Dt
                .DisplayMember = "DEPARTAMENTO_descripcion"
                .ValueMember = "DEPARTAMENTO_id"
                '.SelectedIndex = -1
                .AutoCompleteMode = AutoCompleteMode.Append
                .AutoCompleteSource = AutoCompleteSource.ListItems
            End With
            Llenar_CboProvincias()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Sub Llenar_CboProvincias()
        reconectar()
        Try
            Dim acc As String = "Select * from PROVINCIAS " & _
                "INNER JOIN DEPARTAMENTOS ON PROVINCIAS.departamento_id = DEPARTAMENTOS.departamento_id " & _
                "where departamento_DESCRIPCION='" & Me.ComboBox3.Text & "' order by provincia_descripcion asc "
            Dim Ds As New MySqlDataAdapter(acc, conex)
            Dim Dt As DataTable = New DataTable("PROVINCIAS")
            Ds.Fill(Dt)
            With ComboBox4
                .DataSource = Nothing
                .DataSource = Dt
                .DisplayMember = "provincia_descripcion"
                .ValueMember = "provincia_id"
                '.SelectedIndex = -1
            End With
            Llenar_CboDistritos()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Sub Llenar_CboDistritos()
        reconectar()
        Try
            Dim acc As String = "Select * from DISTRITOS " & _
                "INNER JOIN PROVINCIAS ON DISTRITOS.PROVINCIA_id = PROVINCIAS.provincia_id " & _
                "where PROVINCIA_DESCRIPCION='" & Me.ComboBox4.Text & "' order by distrito_descripcion asc"
            Dim Ds2 As New MySqlDataAdapter(acc, conex)
            Dim Dt As DataTable = New DataTable("distritos")
            Ds2.Fill(Dt)
            With ComboBox5
                .DataSource = Nothing
                .DataSource = Dt
                .DisplayMember = "distrito_descripcion"
                .ValueMember = "distrito_id"
            End With
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Private Sub ComboBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox3.SelectedIndexChanged
        Llenar_CboProvincias()
    End Sub
    Private Sub ComboBox4_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox4.SelectedIndexChanged
        Llenar_CboDistritos()
    End Sub


    Private Sub Direcciones_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        conectar()
        reconectar()
                LIMPIAR()
                Llenar_Cbodepartamentos()
                BUSCA_DIRECCIONES()
    End Sub

Prueba que funcionen las consultas; enviando los valores consultados a TextBox en vez de ComboBox... Otra cosa, los eventos SelectedIndexChanged puede que creen eventos no previstos (vuelven a cargar los datos)...

Poniéndolo solo como texto si funcionan, lo que no funcionan es cuando quiero que además de el departamento y el distrito seleccionado me muestre las opciones para elegir y por consiguiente me seleccione el dato guardado

Prueba cargar cada ComboBox independientemente en el evento Load del Form, algo así:

Conectar()
Reconectar()
LIMPIAR()
Try
   Llenar_Cbodepartamentos()
   Llenar_CboProvincias()
   Llenar_CboDistritos()
   BUSCA_DIRECCIONES()
Catch ex As Exception 
End Try

Y quita las referencias a las funciones en Llenar_Cbodepartamentos() y Llenar_CboProvincias() para que no se repita...

umm al parecer el error se genera aen el evento SelectedIndexChanged pero sin eso ya no me cargaría o filtraría las provincias y distritos

Crea una variable para el Form, al inicio del evento Load le das un valor a la variable y al finalizar el evento correctamente le das otro valor. Cuando se generen los eventos SelectedIndexChanged compruebas el valor de la variable, y dependiendo del valor ejecutas o no las funciones.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas