que tienen una enumeración de esta manera:.NET enlace de datos un cuadro combinado a una enumeración de la cadena con atributos Descripción
public enum Cities
{
[Description("New York City")]
NewYork,
[Description("Los Angeles")]
LosAngeles,
Washington,
[Description("San Antonio")]
SanAntonio,
Chicago
}
quiero obligar a un cuadro combinado y he intentado esto:
comboBox.DataSource = Enum.GetNames(typeof(Cities));
Pero eso muestra los valores en el cuadro combinado en lugar de la descripción de la cadena. Por lo que me pasa a esto:
public static string GetEnumDescription(Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes != null && attributes.Length > 0)
{
return attributes[0].Description;
}
else
{
return value.ToString();
}
}
public static IList ToList(this Type type)
{
ArrayList list = new ArrayList();
Array enumValues = Enum.GetValues(type);
foreach (Enum value in enumValues)
{
list.Add(new KeyValuePair<Enum, string>(value, GetEnumDescription(value)));
}
return list;
}
Ahora el list.Add() resultados de llamadas en el valor y su descripción cadena que se está representada en el cuadro combinado, así que sustituyen
list.Add(new KeyValuePair<Enum, string>(value, GetEnumDescription(value)));
con
list.Add(GetEnumDescription(value));
y ahora obtengo solo la cadena descriptiva que se muestra en el cuadro combinado, que es lo que quiero en última instancia. Ahora mi enlace de datos está roto porque no puede encontrar solo la descripción de la cadena en la enumeración. Pensé que esto podría estar relacionado con combobox.DisplayMember y combobox.ValueMember pero aún no he podido resolver el problema. ¿Alguien puede decirme cómo diablos puedo mostrar la cadena descriptiva pero hacer que mi enlace de datos use el valor para almacenar, etc.? ¡¡¡Gracias!!!
Solo por curiosidad ... ¿por qué tienes que usar un Enum para esto? –
Necesito mostrar varios cuadros combinados que contienen diferentes opciones fijas para que mis usuarios puedan elegir. Tal vez haya un cuadro combinado para mostrar cuatro colores (rojo, amarillo, verde, azul). Otro podría mostrar una lista de formas para que ellos elijan. Como estas son listas fijas, pensé que una enumeración tendría sentido.Tengo una clase de "datos" que modela todas estas cosas y cuando el usuario ha terminado de hacer sus selecciones en la interfaz de usuario, simplemente analizo las propiedades del objeto de datos y guardo los valores en un archivo. Eso responde tu pregunta? – user685869
Sí, y funcionará bien de la forma en que lo hace, solo hace que el código sea un poco más complicado. Dado que esta es una lista codificada de todos modos, ¿cuál sería el inconveniente de crear una lista codificada en tiempo de ejecución como alternativa? –