构造枚举字段为下拉框值

 将枚举信息构造成对象信息,用于下拉框显示:

首先,下拉框绑定实体:

 1     /// <summary>
 2     /// 枚举对象信息
 3     /// </summary>
 4     public class EnumInfo
 5     {
 6         private int _Id = 0; 
 7         private string _DisplayName = string.Empty;
 8         private object _Val = "";
 9         /// <summary>
10         /// id
11         /// </summary>
12         public int Id
13         {
14             get { return _Id; }
15             set { _Id = value; }
16         }
17         /// <summary>
18         /// display name
19         /// </summary>
20         public string DisplayName
21         {
22             get { return _DisplayName; }
23             set { _DisplayName = value; }
24         } 
25         /// <summary>
26         /// value
27         /// </summary>
28         public object Val
29         {
30             get { return _Val; }
31             set { _Val = value; }
32         }
33     }
View Code

在定义多语言特性类以及语言枚举

 1     /// <summary>
 2     /// 多语言特性
 3     /// </summary>
 4     [AttributeUsage(AttributeTargets.Field, Inherited = false)]
 5     public class MultiLanguageAttribute : Attribute
 6     {
 7         private string _English = string.Empty;
 8         private string _Chinese = string.Empty;
 9         private string _TraditionalChinese = string.Empty;
10         private string _Japanese = string.Empty;
11         private string _German = string.Empty;
12 
13         /// <summary>
14         /// 英语
15         /// </summary>
16         public string English
17         {
18             get
19             {
20                 return _English;
21             }
22             set
23             {
24                 _English = value;
25             }
26         }
27         /// <summary>
28         /// 简体
29         /// </summary>
30         public string Chinese
31         {
32             get
33             {
34                 return _Chinese;
35             }
36             set
37             {
38                 _Chinese = value;
39             }
40         }
41         /// <summary>
42         /// 繁体
43         /// </summary>
44         public string TraditionalChinese
45         {
46             get
47             {
48                 return _TraditionalChinese;
49             }
50             set
51             {
52                 _TraditionalChinese = value;
53             }
54         }
55         /// <summary>
56         /// 日语
57         /// </summary>
58         public string Japanese
59         {
60             get
61             {
62                 return _Japanese;
63             }
64             set
65             {
66                 _Japanese = value;
67             }
68         }
69         /// <summary>
70         /// 德语
71         /// </summary>
72         public string German
73         {
74             get
75             {
76                 return _German;
77             }
78             set
79             {
80                 _German = value;
81             }
82         }
83 
84     }
85     /// <summary>
86     /// 语言枚举
87     /// </summary>
88     public enum LanguageEnum
89     {
90         English,
91         Chinese,
92         TraditionalChinese,
93         Japanese,
94         German,
95     }
View Code

枚举处理类

 1     /// <summary>
 2     /// 枚举处理类
 3     /// </summary>
 4     public class EnumManager
 5     {
 6         /// <summary>
 7         /// 
 8         /// </summary>
 9         /// <param name="enumType"></param>
10         /// <param name="language"></param>
11         /// <returns></returns>
12         public static List<EnumInfo> GetEnumInfoList(Type enumType, LanguageEnum language)
13         {
14             List<EnumInfo> enumInfoList = new List<EnumInfo>();
15             if (enumType.IsEnum == false)
16             {
17                 return enumInfoList;
18             }
19             foreach (var item in Enum.GetValues(enumType))
20             {
21                 string displayName = item.ToString();
22                 FieldInfo fieldInfo = item.GetType().GetField(item.ToString());
23                 MultiLanguageAttribute multiLanguage = fieldInfo.GetCustomAttribute(typeof(MultiLanguageAttribute), false) as MultiLanguageAttribute;
24                 if (multiLanguage != null)
25                 {
26                     switch (language)
27                     {
28                         case LanguageEnum.Chinese:
29                             displayName = multiLanguage.Chinese;
30                             break;
31                         case LanguageEnum.TraditionalChinese:
32                             displayName = multiLanguage.TraditionalChinese;
33                             break;
34                         case LanguageEnum.English:
35                             displayName = multiLanguage.English;
36                             break;
37                         case LanguageEnum.Japanese:
38                             displayName = multiLanguage.Japanese;
39                             break;
40                         case LanguageEnum.German:
41                             displayName = multiLanguage.German;
42                             break;
43                         default:
44                             break;
45                     }
46                 }
47                 EnumInfo enumInfo = new EnumInfo()
48                 {
49                     Id = (int)item,
50                     DisplayName = displayName,
51                     Val = item.ToString(),
52                 };
53                 enumInfoList.Add(enumInfo);
54             }
55             return enumInfoList;
56         }
57         /// <summary>
58         /// 获取显示名称
59         /// </summary>
60         /// <param name="enumValue"></param>
61         /// <param name="language"></param>
62         /// <returns></returns>
63         public string GetEnumDisplayName(Enum enumValue, LanguageEnum language)
64         {
65             string displayName = enumValue.ToString();
66             FieldInfo field = enumValue.GetType().GetField(displayName);
67             MultiLanguageAttribute multiLanguage = field.GetCustomAttribute(typeof(MultiLanguageAttribute), false) as MultiLanguageAttribute;
68             if (multiLanguage != null )
69             {
70                 switch (language)
71                 {
72                     case LanguageEnum.Chinese:
73                         displayName = multiLanguage.Chinese;
74                         break;
75                     case LanguageEnum.TraditionalChinese:
76                         displayName = multiLanguage.TraditionalChinese;
77                         break;
78                     case LanguageEnum.English:
79                         displayName = multiLanguage.English;
80                         break;
81                     case LanguageEnum.Japanese:
82                         displayName = multiLanguage.Japanese;
83                         break;
84                     case LanguageEnum.German:
85                         displayName = multiLanguage.German;
86                         break;
87                     default:
88                         break;
89                 }
90             }
91             return displayName;
92         }
93     }
View Code

调用:

  1、定义枚举,例如订单状态枚举:

 1     /// <summary>
 2     /// 订单状态
 3     /// </summary>
 4     public enum OrderStatusEnum
 5     {
 6         [MultiLanguage(English = "Pending", Chinese = "待定", TraditionalChinese = "待定", Japanese = "未定", German = "Pending")]
 7         Pending = 0,
 8         [MultiLanguage(English = "Paid", Chinese = "已付款", TraditionalChinese = "已付款", Japanese = "支払済み", German = "Zahlung der")]
 9         Paid,
10         [MultiLanguage(English = "Shipped", Chinese = "已发货", TraditionalChinese = "已發貨", Japanese = "出荷済み", German = "Versandt werden")]
11         Shipped,
12         [MultiLanguage(English = "Completed", Chinese = "已完成", TraditionalChinese = "已完成", Japanese = "完成した", German = "Abgeschlossen")]
13         Completed,
14         [MultiLanguage(English = "Dispute", Chinese = "争议", TraditionalChinese = "爭議", Japanese = "紛争", German = "- streit")]
15         Dispute,
16         [MultiLanguage(English = "Held", Chinese = "已锁定", TraditionalChinese = "已鎖定", Japanese = "ロックされている", German = "Gesperrt")]
17         Held,
18         [MultiLanguage(English = "Return", Chinese = "已退货", TraditionalChinese = "已退貨", Japanese = "返品済み", German = "Gewesen.")]
19         Return,
20         [MultiLanguage(English = "Refund", Chinese = "已退款", TraditionalChinese = "已退款", Japanese = "返金済み", German = "Erstattet")]
21         Refund,
22         [MultiLanguage(English = "Cancel", Chinese = "已取消", TraditionalChinese = "已取消", Japanese = "キャンセルした", German = "Abgesagt")]
23         Cancel,
24     }
View Code

  2、实际调用:

1            List<EnumInfo> enumInfoList= EnumManager.GetEnumInfoList(typeof(OrderStatusEnum), LanguageEnum.German);
2            cbOrderStatus.DisplayMember = "DisplayName";
3            cbOrderStatus.ValueMember = "Id";
4            this.cbOrderStatus.DataSource = enumInfoList;
View Code

 

posted on 2018-03-13 11:07  john_yong  阅读(382)  评论(0编辑  收藏  举报

导航