2010-06-23 15 views

risposta

65

se avete oggetto DropDownList chiama ddl si può fare come qui sotto

ddl.DataSource = Enum.GetNames(typeof(EmployeeType)); 
ddl.DataBind(); 

se si desidera che il valore Enum Ritornare alla selezione ....

EmployeeType empType = (EmployeeType)Enum.Parse(typeof(EmployeeType), ddl.SelectedValue); 
1

ho scritto una funzione di supporto per dammi un dizionario che posso legare:

public static Dictionary<int, string> GetDictionaryFromEnum<T>() 
{ 

    string[] names = Enum.GetNames(typeof(T)); 

    Array keysTemp = Enum.GetValues(typeof(T)); 
    dynamic keys = keysTemp.Cast<int>(); 

    dynamic dictionary = keys.Zip(names, (k, v) => new { 
     Key = k, 
     Value = v 
    }).ToDictionary(x => x.Key, x => x.Value); 

    return dictionary; 
} 
12

è possibile utilizzare espressione lambda

 ddl.DataSource = Enum.GetNames(typeof(EmployeeType)). 
     Select(o => new {Text = o, Value = (byte)(Enum.Parse(typeof(EmployeeType),o))}); 
     ddl.DataTextField = "Text"; 
     ddl.DataValueField = "Value"; 
     ddl.DataBind(); 

o Linq

 ddl.DataSource = from Filters n in Enum.GetValues(typeof(EmployeeType)) 
       select new { Text = n, Value = Convert.ToByte(n) }; 
     ddl.DataTextField = "Text"; 
     ddl.DataValueField = "Value"; 
     ddl.DataBind(); 
+0

Lieve errore di battitura nel lambda esempio espressione (manca un riccio in chiusura staffa). ddl.DataSource = Enum.GetNames (typeof (EmployeeType)). Selezionare (o => nuovo {Testo = o, Valore = (byte) (Enum.Parse (tipoof (EmployeeType), o))}); – wloescher