Visual Basic.NET - ValueMember y DisplayMember en Combobox

 
Vista:

ValueMember y DisplayMember en Combobox

Publicado por Agusti (24 intervenciones) el 07/03/2015 13:20:54
Buenos días, necesito ayuda en lo siguiente:

Tengo el siguiente código para llenar un ComboBox asociado a un datatable:

combo.DataSource=datatable
combo.DisplayMember = "Nombre2" (dónde Nombre2 es el campo del datatable que quiero que se muestre al usuario)
combo.ValueMember = "Nombre1" (dónde Nombre1 es el campo que quiero para trabajar y que por tanto no se muestra en el combo)
...

FUNCIONA BIEN! El problema lo tengo pq lo que quiero es que en el text del ComboBox se muestre el valor de ValueMember y no el del DisplayMember, es decir, un resultado en el text y otros en el desplegable. Para ello añado lo siguiente al llenar el combo:

...
combo.Text = combo.SelectedValue.ToString()

Y TAMBIEN ME FUNCIONA!. Ahora bien, si intento desplegar el Combo (método DropDown) ME VUELVE A MOSTRAR EL DISPLAYMEMBER EN EL TEXT EN LUGAR DE LO QUE YO QUIERO, EL VALUEMEMBER

Espero me puedan ayudar
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 16
Ha aumentado su posición en 10 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

ValueMember y DisplayMember en Combobox

Publicado por Horroroso (55 intervenciones) el 09/03/2015 17:45:23
Te paso la solucion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Delegate Sub MiDelegate(ByVal Control As ComboBox, ByVal Texto As String)
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        ComboBox1.DisplayMember = "Nombre2"
        ComboBox1.ValueMember = "Nombre1"
        ComboBox1.DataSource = DataTable
        ComboBox1.SelectedIndex = 0
    End Sub
 
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        Dim Texto As String
        Dim Arreglo(1) As Object
 
        If ComboBox1.SelectedIndex > -1 Then
            Texto = ComboBox1.SelectedValue.ToString()
            Arreglo(0) = ComboBox1
            Arreglo(1) = Texto
            Me.BeginInvoke(New MiDelegate(AddressOf MetodoDelegado), Arreglo)
        End If
 
    End Sub
 
    Public Sub MetodoDelegado(ByVal TheControl As ComboBox, ByVal Texto As String)
        ComboBox1.Text = Texto
    End Sub

Algo a considerar, fijate en el orden de DisplayMember, ValueMember y Datasource, tiene que ser en ese orden.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

ValueMember y DisplayMember en Combobox

Publicado por agusti (24 intervenciones) el 10/03/2015 13:01:02
Funciona perfectamente!
Gracias por la ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ValueMember y DisplayMember en Combobox

Publicado por agusti (24 intervenciones) el 10/03/2015 20:01:18
Siguiendo con el mismo tema quisiera aprovechar para preguntar lo siguiente:

Como que parece que no existe la posibilidad de hacer un combobox de doble columna, para solucionarlo lo que hago es crear un campo adicional (Campo) en el datatable con la información deseada y éste lo enlazo al displaymember del combobox. El tema es que me gustaría que la información se mostrara alineada de la siguiente forma:

Resultado1::::::::::::Adicional1
Resultado2::::::::::::Adicional2
Resultado3::::::::::::Adicional3
Resultado4::::::::::::Adicional4

El problema es que como el valor del resultado es variable, el campo adicional no queda alineado. Para solucionar hago lo siguiente:
Campo=Resultado.PadRight(30) & Adicional (en teoría esto haría que el Resultado1 se llenara de espacios en blanco hasta llegar a la longitud de 30, y a partir de ahí se insertara en valor Adicional1.
Pues bien, aún así no consigo alinear todos los valores Adicional ya que depende del texto que contenga Resultado.
Por ejemplo
Pablo::::::::::::(1/1/1)
Leo::::::::::::::(1/2/2)
Paulo::::::::::::(1/1/1)

¿Hay alguna forma de conseguir lo que quiero?
Espero haberme explicado.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar