confieso que yo nunca he usado las propiedades
.DataSource y
.DisplayMember de los combo para trabajar con ellos, lo hago a la "vieja escuela".
simplemente hago una consulta y que me devuelva un datareader, ese datareader lo recorro y voy llenando el combo con "items.add" y listo...si quiero cambio valores al vuelo por asi decirlo, o sea tengo mas control sobre los datos que me vienen y si quero hacer concatenaciones o alguna logica en el codigo, o si queres agregar mas items todavia a los que te vienen podes hacerlo, con este metodo me lo permite, es como llenar un listview digamos.
aca te paso un ejemplo, si queres usalo.
Private Sub CargarCombo()
Dim drDatos As SqlDataReader = oUsuarios.TraerUsuarios ' aca dentro hago la consulta que devuelve el datareader con los registros
cmbUsuarios.Items.Clear()
While drDatos.Read() ' aca recorro los registros y voy llenando el combo, si queres aca podes concatenar campos, o hacer lo que quieras.
cmbUsuarios.Items.Add(New Combo_itemData(drDatos("nombre"), drDatos("id")))
End While
drDatos.Close()
drDatos = Nothing
End Sub
esa clase
"New Combo_itemData" es una clase que imita la propiedad
ItemData del visual basic 6, si no lo sabes te explico que la propiedad
ItemData era para almacenar un "id" para identificar el item al seleccionarlo, como en vb net no esta mas esta propiedad, hay que hacer una clase aparte que lo imita, aca te explica bien el guille como hacerla.
ItemData en .NETsi vos queres agregar un item por defecto al combo por ejemplo
"SELECCIONE..."
, es facil, en el codigo anterior, despues de usar el
Clear() para limpiar el combo, debes agregar un Item. lo tenes que hacer antes de entrar al bucle del
While, entonces por mas que el datareader no tenga datos, el item
"SELECCIONE..." siempre va a estar.
te quedaria asi:
Private Sub CargarCombo()
Dim drDatos As SqlDataReader = oUsuarios.TraerUsuarios ' aca dentro hago la consulta que devuelve el datareader con los registros
cmbUsuarios.Items.Clear()
cmbUsuarios.Items.Add(New Combo_itemData("SELECCIONE...", "...")) ' item por defecto
While drDatos.Read() ' aca recorro los registros y voy llenando el combo, si queres aca podes concatenar campos, o hacer lo que quieras.
cmbUsuarios.Items.Add(New Combo_itemData(drDatos("nombre"), drDatos("id")))
End While
drDatos.Close()
drDatos = Nothing
End Sub
el item
"SELECCIONE..." siempre va a estar en la posicion indice 0 del combo, por lo tanto es facil validarlo despues al momento de saber cual item seleccionaste.
saludos.