visual studio net item form agregar .net winforms data-binding combobox selectedvalue

.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.