none
Me podrían explicar como llenar un combobox dependiendo de un Id de otro combobox. RRS feed

  • Pregunta

  • Este es mi codigo

    Imports System.Data
    Imports System.Data.OleDb


    Public Class Form1

        Private Sub simulador(sender As Object, e As EventArgs) Handles MyBase.Load

            Dim adaptador As New OleDbDataAdapter
            Dim conexion As New OleDbConnection
            Dim comando As New OleDbCommand
            Dim datos As New DataTable

            Try
                conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Rafael\Documents\fisica4.accdb"
                conexion.Open()
                comando.Connection = conexion
                comando.CommandType = CommandType.Text
                comando.CommandText = "SELECT * FROM ValorA"
                adaptador.SelectCommand = comando
                adaptador.Fill(datos)
                Me.ComboBox1.DataSource = datos
                Me.ComboBox1.DisplayMember = "A"
                Me.ComboBox1.ValueMember = "Id"
                Me.ComboBox1.ResetText()
                Me.ComboBox1.SelectedText = "Seleccione..."

            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

        End Sub

        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            If MsgBox("¿Desea salir de la aplicación?", vbQuestion + vbYesNo, "Alto!!") = vbYes Then
                End
            End If
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            ComboBox1.Text = "Seleccione..."
            ComboBox2.Text = "Seleccione..."
            TextBox1.Text = "0"

        End Sub

        Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    ***Aqui es donde quiero poner los primeros datos, aunque no se ocupa porque se llenan desde el Form

        End Sub

        Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
         ***Y aqui es que dependiendo del Valor que se seleccione en el combobox1 me muestre los ciertos datos por medio de ID de este combobox.

        End Sub

        Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    *** En este no sera necesario porque ya sabre como se hace desde el anterior. 
        End Sub
    End Class

    Por favor y gracias :D

    lunes, 13 de julio de 2015 17:56

Respuestas

  • Hola:
    En un Form con 2 ComboBox, copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient

    Public Class Form1

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.cboCategoria.DropDownStyle = ComboBoxStyle.DropDownList
            Me.cboProducto.DropDownStyle = ComboBoxStyle.DropDownList
            '
            Dim lsQuery As String = "Select CategoryID, CategoryName From Categories Order By CategoryName"
            lP_CargaCombo(Me.cboCategoria, lsQuery, "CategoryName", "CategoryID", False)
        End Sub

        Private Sub cboCategoria_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cboCategoria.SelectionChangeCommitted
            Me.cboProducto.DataSource = Nothing
            Me.cboProducto.Items.Clear()
            Dim lsQuery As String = "Select ProductId, ProductName From Products Where CategoryID=" & Me.cboCategoria.SelectedValue.ToString & " Order By ProductName"
            lP_CargaCombo(Me.cboProducto, lsQuery, "ProductName", "ProductId", True)
        End Sub

        Private Sub lP_CargaCombo(ByRef cboComboBox As ComboBox, ByVal vsQuery As String, ByVal vsVisualiza As String, ByVal vsValor As String, Optional ByVal vbLimpiar As Boolean = False)
            If vbLimpiar = True Then
                cboComboBox.DataSource = Nothing
                cboComboBox.Items.Clear()
            End If
            Try
                Dim loDataTable As New DataTable
                Dim lsCadenaSQL = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=true"
                Using loConexion As New SqlConnection(lsCadenaSQL)
                    Using loDataAdapter As New SqlDataAdapter(vsQuery, loConexion)
                        loDataAdapter.Fill(loDataTable)
                    End Using
                End Using
                If loDataTable.Rows.Count > 0 Then
                    'Creamos un nuevo registro para el elemento en blanco
                    Dim loFila As DataRow = loDataTable.NewRow()
                    loFila.Item(vsValor) = 0
                    loFila.Item(vsVisualiza) = ""
                    ' Insertamos la nueva fila en la primera posición del objeto DataTable.
                    loDataTable.Rows.InsertAt(loFila, 0)
                End If
                With cboComboBox
                    .DataSource = loDataTable
                    .DisplayMember = vsVisualiza
                    .ValueMember = vsValor
                    .SelectedIndex = -1
                End With
            Catch ex As Exception
                MessageBox.Show(ex.Message, "lP_CargaCombo", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

    End Class

    Un saludo desde Bilbo
    Carlos

    martes, 14 de julio de 2015 9:33

Todas las respuestas

  • Hola:
    En un Form con 2 ComboBox, copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient

    Public Class Form1

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.cboCategoria.DropDownStyle = ComboBoxStyle.DropDownList
            Me.cboProducto.DropDownStyle = ComboBoxStyle.DropDownList
            '
            Dim lsQuery As String = "Select CategoryID, CategoryName From Categories Order By CategoryName"
            lP_CargaCombo(Me.cboCategoria, lsQuery, "CategoryName", "CategoryID", False)
        End Sub

        Private Sub cboCategoria_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cboCategoria.SelectionChangeCommitted
            Me.cboProducto.DataSource = Nothing
            Me.cboProducto.Items.Clear()
            Dim lsQuery As String = "Select ProductId, ProductName From Products Where CategoryID=" & Me.cboCategoria.SelectedValue.ToString & " Order By ProductName"
            lP_CargaCombo(Me.cboProducto, lsQuery, "ProductName", "ProductId", True)
        End Sub

        Private Sub lP_CargaCombo(ByRef cboComboBox As ComboBox, ByVal vsQuery As String, ByVal vsVisualiza As String, ByVal vsValor As String, Optional ByVal vbLimpiar As Boolean = False)
            If vbLimpiar = True Then
                cboComboBox.DataSource = Nothing
                cboComboBox.Items.Clear()
            End If
            Try
                Dim loDataTable As New DataTable
                Dim lsCadenaSQL = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=true"
                Using loConexion As New SqlConnection(lsCadenaSQL)
                    Using loDataAdapter As New SqlDataAdapter(vsQuery, loConexion)
                        loDataAdapter.Fill(loDataTable)
                    End Using
                End Using
                If loDataTable.Rows.Count > 0 Then
                    'Creamos un nuevo registro para el elemento en blanco
                    Dim loFila As DataRow = loDataTable.NewRow()
                    loFila.Item(vsValor) = 0
                    loFila.Item(vsVisualiza) = ""
                    ' Insertamos la nueva fila en la primera posición del objeto DataTable.
                    loDataTable.Rows.InsertAt(loFila, 0)
                End If
                With cboComboBox
                    .DataSource = loDataTable
                    .DisplayMember = vsVisualiza
                    .ValueMember = vsValor
                    .SelectedIndex = -1
                End With
            Catch ex As Exception
                MessageBox.Show(ex.Message, "lP_CargaCombo", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

    End Class

    Un saludo desde Bilbo
    Carlos

    martes, 14 de julio de 2015 9:33
  • bueno yo recomiendo una vez que tienes los datos en una tabla hacer lo siguiente:

    for each fila as datarow in datos.rows
    combobox1.items.add(fila.item("a").tostring)
    combobox2.items.add(fila.item("id").tostring)
    next for
    'hecho esto los dos combobox tienen los datos y estan alineados para poder colocar lo siguiente en el evento changeindex del combobobox1:
    
    combobox2.selectedindex = combobox1.selectedindex
    
    ' y listo
    espero que te sirva cualquier cosa comenta.

    martes, 14 de julio de 2015 17:32
  • Void llenar_combo()

    {

    llenar_otro (ddl_mi_combo.SelectedValue); //en este otro metodo llenaras el otro combo mandando el value del primero

    }


    Si mi respuesta fue útil ayudame marcándola como correcta.

    • Propuesto como respuesta PIO DEVELOPER miércoles, 15 de julio de 2015 18:06
    martes, 14 de julio de 2015 19:27