none
Combo Box (Data Source)

    Pregunta

  • Hola muy buenas,

    Tengo dos Combo Box las cuales están vinculadas mediante el Data Source a la misma columna de una base de datos en Acces.

    Combo Box 1 : Cliente Principal

    Combo Box 2 : Cliente Final

    El problemas es que como las dos tienen el mismo Data Source, cuando elijo un cliente en un combo box en el otro me aparece el mismo.

    Lo que me gustaria hacer es poder elegir clientes distintos teniendo el mismo Data Source.

    Espero que me puedan ayudar.

    Gracias de antemano!!

    viernes, 16 de diciembre de 2016 16:08

Respuestas

  • Nah!

    Cómo vas a hacer una copia del datatable !!!!

    Lo que necesitas son dos insignificantes bindings, uno para cada combo. En trabajo escencial de un binding es, más allá de sincronizar, el de mantener el track del item actual.

    Como tienes dos controles, necesitas dos bindings. Cada uno sabe cual es el item seleccionado en su combobox.

    • Marcado como respuesta Fran_6 sábado, 17 de diciembre de 2016 12:03
    viernes, 16 de diciembre de 2016 18:00

Todas las respuestas

  • En ambos Combo Box tengo la misma configuración de datos.


    viernes, 16 de diciembre de 2016 16:23
  • Hola Bueno asi como lo estás haciendo podrías quizás agregar otro dataset y configurar tu sdo combo con el sdo dataset, pero porque no lo cargas mediante código creandote una función

        Public Function getClientes() As DataTable
            Dim dt As New DataTable()
            Using conn As New OleDbConnection(ConfigurationManager.ConnectionStrings("default").ToString())
                conn.Open()
                Dim sql As String = "SELECT * FROM Tb_CLiente "
                Dim cmd As New OleDbCommand(sql, conn)
    
                Dim da As New OleDbDataAdapter(cmd)
                da.Fill(dt)
            End Using
            Return dt
        End Function
    
        Private Sub frmCombos_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            cboClientePrincipal.ValueMember = "empresa"
            cboClientePrincipal.DisplayMember = "empresa"
            cboClientePrincipal.DataSource = getClientes()
    
            cboClienteFinal.ValueMember = "empresa"
            cboClienteFinal.DisplayMember = "empresa"
            cboClienteFinal.DataSource = getClientes()
    
        End Sub


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.

    viernes, 16 de diciembre de 2016 16:39
  • Fran_6,

    El caso que mencionas sucede precisamente porque el binding apunta a la misma referencia, para resolver el "conflicto" debes crear una copia de la estructura y de los datos y referenciar la copia del origen al segundo desplegable. Si decides vincular los datos mediante código (rellenando y vinculando un objeto de tipo DataTable) podrías usar el método Copy():

    ComboBox1.ValueMember = "id"
    ComboBox1.DisplayMember = "Nombre"
    ComboBox1.DataSource = dt
    
    ComboBox2.ValueMember = "id"
    ComboBox2.DisplayMember = "Nombre"
    ComboBox2.DataSource = dt.Copy()

    Si el objetivo es continuar el uso de la clase BindingSource puedes -de la misma manera- crear una copia, Copy of BindingSource object


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 16 de diciembre de 2016 17:43
  • Nah!

    Cómo vas a hacer una copia del datatable !!!!

    Lo que necesitas son dos insignificantes bindings, uno para cada combo. En trabajo escencial de un binding es, más allá de sincronizar, el de mantener el track del item actual.

    Como tienes dos controles, necesitas dos bindings. Cada uno sabe cual es el item seleccionado en su combobox.

    • Marcado como respuesta Fran_6 sábado, 17 de diciembre de 2016 12:03
    viernes, 16 de diciembre de 2016 18:00
  • ¿Y por qué no? ¿algún sustento válido?.

    Si ya se cuenta con una estructura e incluso datos (lo último en caso de usar un objeto de tipo DataTable previamente rellenado con datos), ¿por qué no hacer una simple copia del objeto y con ello evitar una doble definición sobre un mismo conjunto de datos?

    viernes, 16 de diciembre de 2016 22:20
  • MUCHAS GRACIAS!!!

    Lo solucione como mencionaste anteriormente.

    sábado, 17 de diciembre de 2016 10:42