.net - net - visual studio combobox get selected value
Enlazando un ComboBox a un IList y usando SelectedValue (1)
Ay. Después de haber perdido medio día en este, lo he descubierto. Fue completamente un error de mi parte.
KVPList
se configuró en IList
de KeyValuePair<
short
,string>
, pero el campo de datos es de tipo int
. Esencialmente, el enlace de datos se activaría y establecería la propiedad SelectedValue
. Luego, los enlaces DisplayMember
y ValueMember
se ValueMember
, verificando SelectedValue
nuevamente. Dado que ValueMember
es de tipo short
, no int
, no encontraría una coincidencia y, por lo tanto, lo configuraría como nulo.
Algo gracioso debe estar pasando con el boxeo y el unboxing, pero estoy demasiado cansado para comprender por qué ahora mismo.
Dejaré esta pregunta en caso de que alguien más se encuentre con el mismo problema. Es difícil de rastrear porque esperaría que intente lanzar o lanzar una excepción, no silenciosamente pasar a cero. Después de todo, short
e int
son ambos tipos de valores y la última vez que lo marqué (int)10 == (short)10
es verdadero.
Tengo un ComboBox
configurado de la siguiente manera, donde KVPList
es un IList
(de KeyValuePair
si es importante):
comboBox.DisplayMember = "Value";
comboBox.ValueMember = "Key";
comboBox.DataSource = KVPList;
Luego configuré un enlace con SelectedValue
, vinculando a BindingSource
(a un DataSet
). Por alguna razón, el cuadro combinado siempre aparece en blanco cuando se muestra el formulario. Sin embargo, está debidamente poblada (los valores de IList
aparecen bien y pueden seleccionarse).
Ahora, hice mi mejor esfuerzo para rastrear, y parece configurar inicialmente el SelectedValue correctamente cuando está vinculado, pero luego en algún punto del camino se restablece a null
. He jugado con el orden en que se llamaron las cosas también, sin éxito.
¿Alguien puede arrojar algo de luz sobre esto o sugerir una solución alternativa?
Para el registro, en el mismo formulario, tengo otro ComboBox
en el mismo formulario, con su SelectedValue
vinculado al mismo BindingSource
. DataSource
es un DataSet
, no un IList
y funciona como un encanto. Puede ser una opción para hacer una DataTable
desde el IList
, pero parece una gran cantidad de gastos adicionales; Estoy generando el IList
partir de una enumeración.