2012-05-08 23 views
9

Soy nuevo en C# y tengo una pregunta,enumeración valor a DROPDOWNLIST

tengo aa enumeración algo así como

public enum 
     { 
    [Description("1,2,3")] 
    123, 
    [Description("3,4,5")] 
    345, 
    [Description("6,7,8 ")] 
    678, 
     } 

Ahora quiero las descripciones de enumeración que se unen a una lista desplegable .. puede alguien me ayude ...

gracias de antemano!

PD: Lo siento si no estoy clear..Let me haga saber si necesito ser más específicos

+0

¿Qué debe contener por la caída? Tres elementos o nueve? – Oded

+2

Eche un vistazo a la biblioteca ['Humanizer'] (http://www.mehdi-khalili.com/introducing-humanizer). – Oded

Respuesta

9
public static class EnumExtensionMethods 
{ 
    public static string GetDescription(this Enum enumValue) 
    { 
     object[] attr = enumValue.GetType().GetField(enumValue.ToString()) 
      .GetCustomAttributes(typeof (DescriptionAttribute), false); 

     return attr.Length > 0 
      ? ((DescriptionAttribute) attr[0]).Description 
      : enumValue.ToString();    
    } 

    public static T ParseEnum<T>(this string stringVal) 
    { 
     return (T) Enum.Parse(typeof (T), stringVal); 
    } 
} 

//Usage with an ASP.NET DropDownList 
foreach(MyEnum value in Enum.GetValues<MyEnum>()) 
    myDDL.Items.Add(New ListItem(value.GetDescription(), value.ToString()) 
... 
var selectedEnumValue = myDDL.SelectedItem.Value.ParseEnum<MyEnum>() 

//Usage with a WinForms ComboBox 
foreach(MyEnum value in Enum.GetValues<MyEnum>()) 
    myComboBox.Items.Add(new KeyValuePair<string, MyEnum>(value.GetDescription(), value)); 

myComboBox.DisplayMember = "Key"; 
myComboBox.ValueMember = "Value"; 
... 
var selectedEnumValue = myComboBox.SelectedItem.Value; 

Estos dos métodos de extensión han sido de gran valor para mí para ir de 5 años y dos trabajos diferentes, precisamente por su necesidad declarada.

0

usted podría construir una clase contenedora que busca la DescriptionAttribute de cada miembro y muestra de eso. A continuación, enlazar a la instancia de contenedor. Algo como esto:

Get the Enum<T> value Description

3

Esta es la forma en que se escribirían:

public enum Test 
{ 
    [Description("1,2,3")] 
    a = 123, 
    [Description("3,4,5")] 
    b = 345, 
    [Description("6,7,8")] 
    c = 678 
} 

//Get attributes from the enum 
    var items = 
     typeof(Test).GetEnumNames() 
     .Select (x => typeof(Test).GetMember(x)[0].GetCustomAttributes(
      typeof(DescriptionAttribute), false)) 
     .SelectMany(x => 
      x.Select (y => new ListItem(((DescriptionAttribute)y).Description))) 

//Add items to ddl 
    foreach(var item in items) 
     ddl.Items.Add(item); 
+0

intenté esto pero no puedo ver GetEnumNames() y .GetCustomAttributes() ¿me falta un ensamblado? – helpme

+0

@helpme ¿No estás usando el framework 4? – Magnus

+0

sí, estoy usando 4 :( – helpme

Cuestiones relacionadas