Desculpe por ter esta discussão antiga.
Eu seguiria o caminho a seguir para localizar enum, pois ele pode exibir valores significativos e localizados para o usuário, não apenas a descrição, através de um campo de texto da lista suspensa neste exemplo.
Primeiro, eu crio um método simples chamado OwToStringByCulture para obter seqüências localizadas de um arquivo de recursos globais; neste exemplo, é BiBongNet.resx na pasta App_GlobalResources. Dentro desse arquivo de recurso, verifique se todas as strings são iguais aos valores da enumeração (ReallyNice, SortOfNice, NotNice). Nesse método, passo o parâmetro: resourceClassName, que geralmente é o nome do arquivo de recurso.
Em seguida, crio um método estático para preencher uma lista suspensa com enum como fonte de dados, chamada OwFillDataWithEnum. Este método pode ser usado com qualquer enum posteriormente.
Em seguida, na página com uma lista suspensa chamada DropDownList1, defina no Page_Load a seguinte linha de código simples para preencher a enumeração na lista suspensa.
BiBongNet.OwFillDataWithEnum<HowNice>(DropDownList1, "BiBongNet");
É isso aí. Eu acho que com alguns métodos simples como esses, você pode preencher qualquer controle de lista com qualquer enumeração, não apenas com valores descritivos, mas também com texto localizado para exibição. Você pode fazer todos esses métodos como métodos de extensão para melhor uso.
Espero que esta ajuda. Compartilhe para ser compartilhado!
Aqui estão os métodos:
public class BiBongNet
{
enum HowNice
{
ReallyNice,
SortOfNice,
NotNice
}
/// <summary>
/// This method is for filling a listcontrol,
/// such as dropdownlist, listbox...
/// with an enum as the datasource.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="ctrl"></param>
/// <param name="resourceClassName"></param>
public static void OwFillDataWithEnum<T>(ListControl ctrl, string resourceClassName)
{
var owType = typeof(T);
var values = Enum.GetValues(owType);
for (var i = 0; i < values.Length; i++)
{
//Localize this for displaying listcontrol's text field.
var text = OwToStringByCulture(resourceClassName, Enum.Parse(owType, values.GetValue(i).ToString()).ToString());
//This is for listcontrol's value field
var key = (Enum.Parse(owType, values.GetValue(i).ToString()));
//add values of enum to listcontrol.
ctrl.Items.Add(new ListItem(text, key.ToString()));
}
}
/// <summary>
/// Get localized strings.
/// </summary>
/// <param name="resourceClassName"></param>
/// <param name="resourceKey"></param>
/// <returns></returns>
public static string OwToStringByCulture(string resourceClassName, string resourceKey)
{
return (string)HttpContext.GetGlobalResourceObject(resourceClassName, resourceKey);
}
}