none
¿Como mostrar datos en un combo en vb con sql? RRS feed

  • Pregunta

  • Buen día: Tengo el siguiente código:

        Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            TextBox1.Text = Forminicio.Textbox1.Text
            Dim con As New SqlConnection("Conexion")
            Dim cmd As New SqlCommand("SELECT * FROM TABLA WHERE Campo = @Campo")
            cmd.Connection = con
            con.Open()
            cmd.Parameters.Clear()
            cmd.Parameters.AddWithValue("@Campo", TextBox1.Text)
            cmd.ExecuteNonQuery()
        End Sub

     Lo que quiero lograr es que en el combo me muestre todos los registros que corresponde al valor del Textbox1 que lo tengo como usuario, eso mismo lo puse en la propiedad SelectedIndexChanged del combo pero lo más que he logrado es que me muestre solo uno de los registros pero necesito los dos

    Espero alguien me pueda orientar...


    Javi Rojas.

    miércoles, 25 de abril de 2018 20:30

Respuestas

  • "Korita" preguntó:

    > Lo que quiero lograr es que en el combo me muestre todos los registros que corresponde al valor
    > del Textbox1 que lo tengo como usuario, eso mismo lo puse en la propiedad SelectedIndexChanged
    > del combo pero lo más que he logrado es que me muestre solo uno de los registros pero necesito
    > los dos

    Hola:

    En primer lugar, SelectedIndexChanged no es una propiedad del control ComboBox; es un evento que se desencadena cuando se modifica el valor de la propiedad SelectedIndex del control ComboBox.

    Y en segundo lugar, si tu intención es que se muestre en el control ComboBox los valores de un campo concreto de la consulta SQL de selección que estás ejecutando, lo primero que tienes que hacer es rellenar un objeto DataTable para enlazarlo con el control ComboBox, cuestión esta que no estás haciendo en el código fuente que has publicado:

        Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            TextBox1.Text = Forminicio.Textbox1.Text
    
            ' Crear un objeto DataTable
            Dim dt As New DataTable()
    
            Try
                Using con As New SqlConnection(escribe aquí tu cadena de conexión)
                    Dim cmd As SqlCommand = con.CreateCommand()
                    cmd.CommandText = "SELECT * FROM Tabla WHERE Campo = @Campo"
                    cmd.Parameters.AddWithValue("@Campo", TextBox1.Text)
                    Dim da As New SqlDataAdapter(cmd)
                    da.Fill(dt)
                End Using
    
                ' Enlazamos el control ComboBox con el objeto DataTable rellenado.
                ComboBox1.DataSource = dt
    
                ' Indicamos los valores del campo de la tabla que deseamos mostrar
                ComboBox1.DisplayMember = "Campo"
    
                ' Establecemos el valor que se devolverá al seleccionar un elemento en el control ComboBox
                ComboBox1.ValueMember = "Campo"
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try    
    
         End Sub

    Y ahora, cuando desees recuperar el valor del elemento seleccionado por el usuario, en el evento SelectionChangeCommitted del control ComboBox ejecutarías algo parecido a lo siguiente:

        Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
    
            If (ComboBox1.SelectionLength > 0) Then
                Dim valorElemento As String = ComboBox1.SelectedValue.ToString()
                MessageBox.Show(valorElemento)
            End If
    End Sub

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    jueves, 26 de abril de 2018 9:48
    Moderador

Todas las respuestas

  • "Korita" preguntó:

    > Lo que quiero lograr es que en el combo me muestre todos los registros que corresponde al valor
    > del Textbox1 que lo tengo como usuario, eso mismo lo puse en la propiedad SelectedIndexChanged
    > del combo pero lo más que he logrado es que me muestre solo uno de los registros pero necesito
    > los dos

    Hola:

    En primer lugar, SelectedIndexChanged no es una propiedad del control ComboBox; es un evento que se desencadena cuando se modifica el valor de la propiedad SelectedIndex del control ComboBox.

    Y en segundo lugar, si tu intención es que se muestre en el control ComboBox los valores de un campo concreto de la consulta SQL de selección que estás ejecutando, lo primero que tienes que hacer es rellenar un objeto DataTable para enlazarlo con el control ComboBox, cuestión esta que no estás haciendo en el código fuente que has publicado:

        Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            TextBox1.Text = Forminicio.Textbox1.Text
    
            ' Crear un objeto DataTable
            Dim dt As New DataTable()
    
            Try
                Using con As New SqlConnection(escribe aquí tu cadena de conexión)
                    Dim cmd As SqlCommand = con.CreateCommand()
                    cmd.CommandText = "SELECT * FROM Tabla WHERE Campo = @Campo"
                    cmd.Parameters.AddWithValue("@Campo", TextBox1.Text)
                    Dim da As New SqlDataAdapter(cmd)
                    da.Fill(dt)
                End Using
    
                ' Enlazamos el control ComboBox con el objeto DataTable rellenado.
                ComboBox1.DataSource = dt
    
                ' Indicamos los valores del campo de la tabla que deseamos mostrar
                ComboBox1.DisplayMember = "Campo"
    
                ' Establecemos el valor que se devolverá al seleccionar un elemento en el control ComboBox
                ComboBox1.ValueMember = "Campo"
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try    
    
         End Sub

    Y ahora, cuando desees recuperar el valor del elemento seleccionado por el usuario, en el evento SelectionChangeCommitted del control ComboBox ejecutarías algo parecido a lo siguiente:

        Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
    
            If (ComboBox1.SelectionLength > 0) Then
                Dim valorElemento As String = ComboBox1.SelectedValue.ToString()
                MessageBox.Show(valorElemento)
            End If
    End Sub

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    jueves, 26 de abril de 2018 9:48
    Moderador
  • Hola:
    En un Form como el de la imagen

    Copia y pega el siguiente codigo
    Imports System.Data.SqlClient
    Public Class Form1
        Private mdtDataTable As New DataTable
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.cboDatatable.DropDownStyle = ComboBoxStyle.DropDownList
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Try
                Dim lsCadConexion As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
                Using loConexion As New SqlConnection(lsCadConexion)
                    Dim lsQuery As String = "Select EmployeeID, LastName From Employees Where LastName Like '%' + @Nombre + '%' Order By LastName"
                    Using loComando As New SqlCommand(lsQuery, loConexion)
                        loComando.Parameters.Add(New SqlParameter("@Nombre", Me.txtNombre.Text))
                        Using loDataAdapter As New SqlClient.SqlDataAdapter(loComando)
                            mdtDataTable.Clear()
                            loDataAdapter.Fill(mdtDataTable)
                        End Using
                    End Using
                End Using
                cboDatatable.DisplayMember = "LastName"
                cboDatatable.ValueMember = "EmployeeID"
                cboDatatable.DataSource = mdtDataTable
                Me.cboDatatable.SelectedIndex = -1
                MessageBox.Show("Combo cargado")
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

        Private Sub cboDatatable_SelectionChangeCommitted(sender As Object, e As System.EventArgs) Handles cboDatatable.SelectionChangeCommitted
            MessageBox.Show("Emplead: " & cboDatatable.SelectedValue.ToString)
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    jueves, 26 de abril de 2018 10:02