Désolé d'avoir récupéré ce vieux fil de discussion.
J'irais de la manière suivante pour localiser enum, car il peut afficher des valeurs significatives et localisées à l'utilisateur, pas seulement une description, via un champ de texte de liste déroulante dans cet exemple.
Tout d'abord, je crée une méthode simple appelée OwToStringByCulture pour obtenir des chaînes localisées à partir d'un fichier de ressources globales, dans cet exemple, il s'agit de BiBongNet.resx dans le dossier App_GlobalResources. Dans ce fichier de ressources, assurez-vous que toutes les chaînes sont identiques aux valeurs de l'énumération (ReallyNice, SortOfNice, NotNice). Dans cette méthode, je passe le paramètre: resourceClassName qui est généralement le nom du fichier de ressources.
Ensuite, je crée une méthode statique pour remplir une liste déroulante avec enum comme source de données, appelée OwFillDataWithEnum. Cette méthode peut être utilisée avec n'importe quelle énumération plus tard.
Ensuite, dans la page avec une liste déroulante appelée DropDownList1, j'ai défini dans le Page Load ce qui suit juste une simple ligne de code pour remplir l'énumération de la liste déroulante.
BiBongNet.OwFillDataWithEnum<HowNice>(DropDownList1, "BiBongNet");
C'est tout. Je pense qu'avec quelques méthodes simples comme celles-ci, vous pouvez remplir n'importe quel contrôle de liste avec n'importe quelle énumération, avec non seulement des valeurs descriptives, mais un texte localisé à afficher. Vous pouvez utiliser toutes ces méthodes comme méthodes d'extension pour une meilleure utilisation.
J'espère que cette aide. Partagez pour être partagé!
Voici les méthodes:
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);
}
}