Problema con SelectedValue y ValueMember

30/03/2006 - 13:13 por Rubén Vigón | Informe spam
Estoy probando la característica de VB.NET 2003 de agregar objetos a un ComboBox, mostrar una determinada propiedad de éstos mediante «DisplayMember» y acceder a otra mediante «ValueMember». He creado una clase CEmpleado con dos propiedades públicas ReadOnly llamadas "NIF" y "NombreCompleto" y he agregado un par de objetos a un ComboBox:

Private Sub Form1_Load(...) Handles MyBase.Load
With cboEmpleado.Items
.Add(New CEmpleado("12345678A", "Martínez García, Luis"))
.Add(New CEmpleado("23456789B", "González Puente, Pedro"))
End With
End Sub

En tiempo de ejecución, veo los dos empleados cargados correctamente en el ComboBox; selecciono el primero de ellos con el ratón y quiero mostrar su NIF, seleccionar el segundo empleado y mostrar el NIF de éste, para lo que he colocado un botón que hace:

Private Sub Button1_Click(...) Handles Button1.Click
MessageBox.Show(cboEmpleado.SelectedValue)
cboEmpleado.SelectedValue = "23456789B"
MessageBox.Show(cboEmpleado.SelectedValue)
End Sub

En ambos casos, el MessageBox sale vacío :-(
El ComboBox «cboEmpleado» tiene DisplayMember = "NombreCompleto" y ValueMember = "NIF". Según la ayuda, la propiedad SelectedValue [...] Gets or sets the value of the member property specified by the ValueMember property

¿Qué estoy haciendo mal?

Un millón de gracias de antemano

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvps.org
 

Leer las respuestas

#1 Luis Miguel Blanco
30/03/2006 - 14:53 | Informe spam
Hola Rubén

Prueba a poner los objetos que quieres cargar en el combo dentro de una
colección, por ejemplo un ArrayList. A continuación, pasas dicho ArrayList al
DataSource del combo, y estableces sus propiedades DisplayMember y
ValueMember. Con esto creo que ya te funcionaría.

Te adjunto un bloque de código de ejemplo para que lo pruebes.

'///////////////////////////
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim aEmpleados As ArrayList = New ArrayList
aEmpleados.Add(New CEmpleado("12345678A", "Martínez García, Luis"))
aEmpleados.Add(New CEmpleado("23456789B", "González Puente, Pedro"))

Me.cboEmpleado.DataSource = aEmpleados
Me.cboEmpleado.DisplayMember = "Nombre"
Me.cboEmpleado.ValueMember = "Codigo"
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
MessageBox.Show(Me.cboEmpleado.SelectedValue)
End Sub
'///////////////////////////

Espero que te sea de ayuda

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Rubén Vigón" wrote:

Estoy probando la característica de VB.NET 2003 de agregar objetos a un ComboBox, mostrar una determinada propiedad de éstos mediante «DisplayMember» y acceder a otra mediante «ValueMember». He creado una clase CEmpleado con dos propiedades públicas ReadOnly llamadas "NIF" y "NombreCompleto" y he agregado un par de objetos a un ComboBox:

Private Sub Form1_Load(...) Handles MyBase.Load
With cboEmpleado.Items
.Add(New CEmpleado("12345678A", "Martínez García, Luis"))
.Add(New CEmpleado("23456789B", "González Puente, Pedro"))
End With
End Sub

En tiempo de ejecución, veo los dos empleados cargados correctamente en el ComboBox; selecciono el primero de ellos con el ratón y quiero mostrar su NIF, seleccionar el segundo empleado y mostrar el NIF de éste, para lo que he colocado un botón que hace:

Private Sub Button1_Click(...) Handles Button1.Click
MessageBox.Show(cboEmpleado.SelectedValue)
cboEmpleado.SelectedValue = "23456789B"
MessageBox.Show(cboEmpleado.SelectedValue)
End Sub

En ambos casos, el MessageBox sale vacío :-(
El ComboBox «cboEmpleado» tiene DisplayMember = "NombreCompleto" y ValueMember = "NIF". Según la ayuda, la propiedad SelectedValue [...] Gets or sets the value of the member property specified by the ValueMember property

¿Qué estoy haciendo mal?

Un millón de gracias de antemano

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvps.org

Preguntas similares