Ci scusiamo per aver risolto questo vecchio thread.
Vorrei andare nel modo seguente per localizzare enum, in quanto può mostrare all'utente valori significativi e localizzati, non solo una descrizione, attraverso un campo di testo a discesa in questo esempio.
Innanzitutto, creo un metodo semplice chiamato OwToStringByCulture per ottenere stringhe localizzate da un file di risorse globali, in questo esempio è BiBongNet.resx nella cartella App_GlobalResources. All'interno di questo file di risorse, assicurarsi di avere tutte le stringhe uguali ai valori dell'enum (ReallyNice, SortOfNice, NotNice). In questo metodo, passo il parametro: resourceClassName che di solito è il nome del file di risorse.
Successivamente, creo un metodo statico per riempire un elenco a discesa con enum come origine dati, chiamato OwFillDataWithEnum. Questo metodo può essere utilizzato in seguito con qualsiasi enum.
Quindi nella pagina con un elenco a discesa chiamato DropDownList1, ho impostato in Page_Load la seguente solo una semplice riga di codice per riempire l'enum di elenco a discesa.
BiBongNet.OwFillDataWithEnum<HowNice>(DropDownList1, "BiBongNet");
Questo è tutto. Penso che con alcuni semplici metodi come questi, puoi riempire qualsiasi controllo elenco con qualsiasi enum, con non solo valori descrittivi ma testo localizzato da visualizzare. Puoi utilizzare tutti questi metodi come metodi di estensione per un migliore utilizzo.
Spero che questo aiuto. Condividi per essere condiviso!
Ecco i metodi:
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);
}
}