构造枚举字段为下拉框值
将枚举信息构造成对象信息,用于下拉框显示:
首先,下拉框绑定实体:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
在定义多语言特性类以及语言枚举
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
枚举处理类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
调用:
1、定义枚举,例如订单状态枚举:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
2、实际调用:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 List<EnumInfo> enumInfoList= EnumManager.GetEnumInfoList(typeof(OrderStatusEnum), LanguageEnum.German); 2 cbOrderStatus.DisplayMember = "DisplayName"; 3 cbOrderStatus.ValueMember = "Id"; 4 this.cbOrderStatus.DataSource = enumInfoList;