winform propiedades net llenar combo .net winforms data-binding combobox bindingsource

.net - net - propiedades de un combobox en c#



.NET WinForms combobox bindingsource y pregunta de enlace de datos (2)

Necesitas hacer algo en esta línea:

string[] colors = Enum.GetNames(typeof(colorEnum)); this.comboBox1.DataSource = colors;

..y para facilitar las cosas, simplemente almacena el color favorito como tipo de string y no como colorEnum

Creé la siguiente clase para modelar a una persona:

namespace DataBindingTest { public enum colorEnum { Red, Green, Yellow, Blue, } class Person { private string _Name; private int _Age; private colorEnum _FavoriteColor; private bool _HasAllergies; public string Name { get { return _Name; } set { _Name = value; } } public int Age { get { return _Age; } set { _Age = value; } } public colorEnum FavoriteColor { get { return _FavoriteColor; } set { _FavoriteColor = value; } } public bool HasAllergies { get { return _HasAllergies; } set { _HasAllergies = value; } } } }

En mi formulario principal, tengo un cuadro combinado que estará vinculado a una matriz de objetos Person. Cuando selecciono una persona de este cuadro combinado, quiero mostrar su edad (en un control NumericUpDown), si tienen alergias (como una casilla de verificación) y su color favorito (en otro cuadro combinado con DropDownStyle establecido en DropDownList). Para lograr esto, tengo:

  1. Agregué un comboBox (comboBoxPeople), un control NumericUpDown, un checkBox y otro comboBox (comboBoxFavoriteColor) a mi formulario.
  2. Creé un nuevo DataSource de mi clase Person declarado anteriormente
  3. Agregué un BindingSource a mi formulario
  4. Establezca la propiedad DataSource de BindingSource en el DataSource definido en el n. ° 2.
  5. Establezca DataSource para comboBoxPeople en BindingSource y DisplayMember en la propiedad Name de BindingSource
  6. He vinculado la propiedad Age de BindingSource a un control NumericUpDown y la propiedad HasAllergies de BindingSource a un control checkBox
  7. En mi constructor, creé una matriz de objetos de 3 personas, definí todas sus propiedades y luego establecí la propiedad DataSource de BindingSource en esta matriz

Hasta ahora, todo está funcionando como se esperaba. Ahora me gustaría mostrar el color favorito de la persona (es decir, la propiedad FavoriteColor de BindingSource) en comboBoxFavoriteColor. Establecí DropDownStyle en DropDownList porque FavoriteColor es una enumeración. Sin embargo, no tengo claro cómo debo vincular este comboBox para que 1) contenga los valores enum de FavoriteColor y 2) tenga el color apropiado establecido como SelectedItem cuando elijo una persona de comboBoxPeople. ¿Alguien puede darme una idea sobre esto? ¡Muchas gracias!


Puede hacer lo que sugiere Tom, pero hay al menos una manera fácil de hacerlo sin cambiar Person.FavoriteColor por una cadena.

Agregue una propiedad a la persona llamada FavoriteColorString :

public class Person { [...] public colorEnum FavoriteColor { get; set; } public string FavoriteColorString { get { return FavoriteColor.ToString(); } set { FavoriteColor = (colorEnum)Enum.Parse(typeof(colorEnum), value); } } }

Vuelva a compilar para que la nueva propiedad aparezca en el bindingsource.

Ahora vincula comboBoxFavoriteColor.SelectedItem a FavoriteColorString .

Y en tiempo de ejecución, haz lo que Tom dijo:

comboBoxFavoriteColor.DataSource = Enum.GetNames(typeof(colorEnum));

Voila! Ahora debería funcionar de la manera que desee.

Cuando persiste en los objetos de configuración, simplemente no persista en la propiedad FavoriteColorString.