none
Como Crear una lista desplegable a partir de una tabla

    Question

  • tengo 2 tablas una que se llama clientes y otra que se llama articulos...
    cliente               -articulos
    id cliente            -idarticulo
    nombre              -idcliente
    apellido              -nombre del producto

                            - descripcion

     

    lo que quiero hacer es que en el formulario de articulos me aparesca una lista desplegable con los id's de los clientes i una vez seleccionado un id de cliente en 2 text box se vacien el nombre i su apellido ...

     

    haber si me pueden ayudar GRACIAS!!!

     

    Tuesday, April 12, 2011 11:49 PM

Answers

  • "pablo gûereca" preguntó:

    > lo que quiero hacer es que en el formulario de articulos me aparesca
    > una lista desplegable con los id's de los clientes i una vez
    > seleccionado un id de cliente en 2 text box se vacien el nombre i
    > su apellido ...

    Hola, Pablo:

    Otra opción es trabajar de manera "no conectada" con la base de datos. Para ello tendrías que enlazar el control ComboBox con un objeto DataTable, de ésta manera rellenarás sus elementos de manera automática y al seleccionar un elemento cualquiera, obtendrías su Nombre y Apellidos.

    La siguiente función te devolverá un objeto DataTable con los campos necesarios de tu tabla Clientes. El ejemplo utiliza una base de datos de Access:

       Private Function GetDataClientes() As DataTable

            Try
                ' Configuramos una conexión con el origen de datos.
                '
                Using cnn As OleDbConnection = New OleDbConnection(cadenaConexion)

                    ' Especificamos la consulta SQL de selección que
                    ' vamos a ejecutar.
                    '
                    Dim sql As String = "SELECT IdCliente, Nombre, Apellido FROM Clientes"

                    ' Creamos el adaptador de datos.
                    '
                    Dim da As OleDbDataAdapter = New OleDbDataAdapter(sql, cnn)

                    ' Creamos un nuevo objeto DataTable.
                    '
                    Dim dt As DataTable = New DataTable("Clientes")

                    ' Rellenamos el objeto DataTable.
                    '
                    da.Fill(dt)

                    ' Devolvemos el objeto DataTable.
                    '
                    Return dt

                End Using

            Catch ex As Exception
                ' Devolvemos la excepción al procedimiento llamador.
                '
                Throw

            End Try

        End Function

    En el evento Load del formulario, configurarías el control ComboBox:

            ' Antes de todo, instalamos el controlador para el evento
            ' SelectedValueChanged del control ComboBox.
            AddHandler ComboBox1.SelectedValueChanged, AddressOf ComboBoxOnSelectedValueChanged

            ' Configuramos el control ComboBox
            '
            With ComboBox1
                .DataSource = GetDataClientes()
                .DisplayMember = "IdCliente"
                .ValueMember = "IdCliente"
            End With

    Y en el evento SelectedValueChanged del control ComboBox, rellenarías los controles TextBox correspondientes a los campos Nombre y Apellidos:

        Private Sub ComboBoxOnSelectedValueChanged(ByVal sender As Object, ByVal e As EventArgs)

            If (TypeOf ComboBox1.SelectedValue Is DataRowView) Then Return

            ' Obtenemos el identificador del cliente seleccionado
            Dim idCliente As Int32 = Convert.ToInt32(ComboBox1.SelectedValue)

            ' Referenciamos el objeto DataTable enlazado con el
            ' control ComboBox
            Dim dt As DataTable = DirectCast(ComboBox1.DataSource, DataTable)

            ' Seleccionamos el registro correspondiente al cliente
            Dim rows() As DataRow = dt.Select(String.Format("IdCliente = {0}", idCliente))

            If (rows.Length = 0) Then
                ' No existe el cliente seleccionado
                txtNombre.Clear()
                txtApellido.Clear()
                Return
            End If

            ' Obtenemos el Nombre y el Apellido del Cliente
            txtNombre.Text = Convert.ToString(rows(0).Item("Nombre"))
            txtApellido.Text = Convert.ToString(rows(0).Item("Apellido"))

        End Sub

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

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    Wednesday, April 13, 2011 2:04 PM

All replies

  • hola

    una vez seleccionado un id de cliente en 2 text box se vacien el nombre i su apellido

    o sea en este caso estarias trabjando con la misma tabla de cliente

    el tema es que no ahs mencioando hasta donde has llegado en tu codigo, o sea no tiene nada de nada o puedes cargar los combos con cliente y solo falta recuperar los textbox ?

    lo pregunto porque una cosa es facilitar el codigo de todo, y otra distinta es solo una parte

    ayuda mencionar tambien que tecnica usas para recuperar los datos, si usas dataset tipados o los objetos de ado.net

    tampcoo has mencionado que base de datos usas, sera sql server, access, mysql , etc

    por lo pronto podrias trabjar en el evento SelectionChangeCommitted del combo, tomar el valor y por medio de una consulta cargar los textbox

    Private Sub cmdCliente_SelectionChangeCommitted(....)

        Dim connstring As String = "connection string"
        Using cnn As New SqlConnection(connstring)
            cnn.Open()
           
            Dim strSQL As String = "SELECT nombre, apellido FROM Clientes WHERE id = @id"
            Dim cmd As New SqlCommand(strSQL, cnn)
            cmd.Parameters.AddWithValue("@id", Cint(cmdCliente.SelectedValue))
           
            Dim reader As SqlDatareader = cmd.ExecuteReader()
           
            If reader.Read() Then
           
                txtnombre.Text = CStr(reader("nombre"))
                txtapellido.Text = CStr(reader("apellido"))
           
            End If
       
        End Using
       
    End Sub

     

    en el ejemplo supuse que usas sql server

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Wednesday, April 13, 2011 12:19 AM
  • "pablo gûereca" preguntó:

    > lo que quiero hacer es que en el formulario de articulos me aparesca
    > una lista desplegable con los id's de los clientes i una vez
    > seleccionado un id de cliente en 2 text box se vacien el nombre i
    > su apellido ...

    Hola, Pablo:

    Otra opción es trabajar de manera "no conectada" con la base de datos. Para ello tendrías que enlazar el control ComboBox con un objeto DataTable, de ésta manera rellenarás sus elementos de manera automática y al seleccionar un elemento cualquiera, obtendrías su Nombre y Apellidos.

    La siguiente función te devolverá un objeto DataTable con los campos necesarios de tu tabla Clientes. El ejemplo utiliza una base de datos de Access:

       Private Function GetDataClientes() As DataTable

            Try
                ' Configuramos una conexión con el origen de datos.
                '
                Using cnn As OleDbConnection = New OleDbConnection(cadenaConexion)

                    ' Especificamos la consulta SQL de selección que
                    ' vamos a ejecutar.
                    '
                    Dim sql As String = "SELECT IdCliente, Nombre, Apellido FROM Clientes"

                    ' Creamos el adaptador de datos.
                    '
                    Dim da As OleDbDataAdapter = New OleDbDataAdapter(sql, cnn)

                    ' Creamos un nuevo objeto DataTable.
                    '
                    Dim dt As DataTable = New DataTable("Clientes")

                    ' Rellenamos el objeto DataTable.
                    '
                    da.Fill(dt)

                    ' Devolvemos el objeto DataTable.
                    '
                    Return dt

                End Using

            Catch ex As Exception
                ' Devolvemos la excepción al procedimiento llamador.
                '
                Throw

            End Try

        End Function

    En el evento Load del formulario, configurarías el control ComboBox:

            ' Antes de todo, instalamos el controlador para el evento
            ' SelectedValueChanged del control ComboBox.
            AddHandler ComboBox1.SelectedValueChanged, AddressOf ComboBoxOnSelectedValueChanged

            ' Configuramos el control ComboBox
            '
            With ComboBox1
                .DataSource = GetDataClientes()
                .DisplayMember = "IdCliente"
                .ValueMember = "IdCliente"
            End With

    Y en el evento SelectedValueChanged del control ComboBox, rellenarías los controles TextBox correspondientes a los campos Nombre y Apellidos:

        Private Sub ComboBoxOnSelectedValueChanged(ByVal sender As Object, ByVal e As EventArgs)

            If (TypeOf ComboBox1.SelectedValue Is DataRowView) Then Return

            ' Obtenemos el identificador del cliente seleccionado
            Dim idCliente As Int32 = Convert.ToInt32(ComboBox1.SelectedValue)

            ' Referenciamos el objeto DataTable enlazado con el
            ' control ComboBox
            Dim dt As DataTable = DirectCast(ComboBox1.DataSource, DataTable)

            ' Seleccionamos el registro correspondiente al cliente
            Dim rows() As DataRow = dt.Select(String.Format("IdCliente = {0}", idCliente))

            If (rows.Length = 0) Then
                ' No existe el cliente seleccionado
                txtNombre.Clear()
                txtApellido.Clear()
                Return
            End If

            ' Obtenemos el Nombre y el Apellido del Cliente
            txtNombre.Text = Convert.ToString(rows(0).Item("Nombre"))
            txtApellido.Text = Convert.ToString(rows(0).Item("Apellido"))

        End Sub

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

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    Wednesday, April 13, 2011 2:04 PM