日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将枚举值转换为DropDownList等的选项值

發布時間:2025/5/22 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将枚举值转换为DropDownList等的选项值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

應用場景:在項目中,我們已習慣將較穩定的分類標準定義為枚舉,來保證程序中取值的合法性,也使代碼更清晰。某些情況下我們需要在DropDownList等選擇控件上綁定某個枚舉的所有枚舉值,供用戶自行選擇,這時就需要將枚舉值轉換為DropDownList等的選項值。

?

最初遇到這種需求時,我隨手寫了個簡單的方法如下。

  • 枚舉定義
/// <summary> /// 緊急程度 /// </summary> public enum eOA_EmergencyLevel {/// <summary>/// 平件/// </summary>平件 = 1,/// <summary>/// 急件/// </summary>急件 = 2 }
  • 將枚舉轉換成ArrayList
/// <summary> /// 將枚舉轉換成ArrayList /// </summary> /// <returns></returns> public static IList EnumToList(Type enumType) {ArrayList list = new ArrayList();foreach (int i in Enum.GetValues(enumType)){ListItem listitem = new ListItem(Enum.GetName(enumType, i), i.ToString());list.Add(listitem);}return list; }
  • 綁定
/// <summary> /// 將枚舉轉換成下拉框 /// </summary> public static void FillDropDownList(DropDownList ddl, Type enumType) {ddl.Items.Clear();ddl.DataSource = EnumToList(enumType);ddl.DataValueField = "value";ddl.DataTextField = "text";ddl.DataBind(); }

?

后來,在同事討論代碼時,被大家批評為不該使用這種中文的枚舉名稱;同時我自己也覺得這種反射方式性能有問題。不過因為影響不大,一直懶得去理它。

最近看到了兩篇博文(枚舉的顯示和綁定和一個利用擴展方法的實例:AttachDataExtensions),是利用C# 3.0的擴展方法實現的,實現得很是優美,可惜我們的項目基于.NET 2.0,用不上。但受此啟發,便花了點時間使用Attribute和緩存的技術重構了原來的代碼。

  • EnumShowNameAttribute
/// <summary> /// 枚舉的顯示名稱 /// </summary> [global::System.AttributeUsage(AttributeTargets.Field, Inherited = false, AllowMultiple = false)] public sealed class EnumShowNameAttribute : Attribute {private string showName;/// <summary>/// 顯示名稱/// </summary>public string ShowName{get{return this.showName;}}/// <summary>/// 構造枚舉的顯示名稱/// </summary>/// <param name="showName">顯示名稱</param>public EnumShowNameAttribute(string showName){this.showName = showName;} }
  • 枚舉定義
/// <summary> /// 緊急程度 /// </summary> public enum eOA_EmergencyLevel {/// <summary>/// 平件/// </summary>[EnumShowName("平件")]Common = 1,/// <summary>/// 急件/// </summary>[EnumShowName("急件")]Emergency = 2 }
  • 枚舉工具類
/// <summary> /// 枚舉工具類 /// </summary> public sealed class EnumUtil {private static Dictionary<string, Dictionary<int, string>> _EnumList = new Dictionary<string, Dictionary<int, string>>(); //枚舉緩存池/// <summary>/// 將枚舉綁定到ListControl/// </summary>/// <param name="listControl">ListControl</param>/// <param name="enumType">枚舉類型</param>public static void FillListControl(ListControl listControl, Type enumType){listControl.Items.Clear();listControl.DataSource = EnumToDictionary(enumType);listControl.DataValueField = "key";listControl.DataTextField = "value";listControl.DataBind();}/// <summary>/// 將枚舉轉換成Dictionary&lt;int, string&gt;/// Dictionary中,key為枚舉項對應的int值;value為:若定義了EnumShowName屬性,則取它,否則取name/// </summary>/// <param name="enumType">枚舉類型</param>/// <returns></returns>public static Dictionary<int, string> EnumToDictionary(Type enumType){string keyName = enumType.FullName;if (!_EnumList.ContainsKey(keyName)){Dictionary<int, string> list = new Dictionary<int, string>();foreach (int i in Enum.GetValues(enumType)){string name = Enum.GetName(enumType, i);//取顯示名稱string showName = string.Empty;object[] atts = enumType.GetField(name).GetCustomAttributes(typeof(EnumShowNameAttribute), false);if (atts.Length > 0) showName = ((EnumShowNameAttribute)atts[0]).ShowName;list.Add(i, string.IsNullOrEmpty(showName) ? name : showName);}object syncObj = new object();if (!_EnumList.ContainsKey(keyName)){lock (syncObj){if (!_EnumList.ContainsKey(keyName)){_EnumList.Add(keyName, list);}}}}return _EnumList[keyName];}/// <summary>/// 獲取枚舉值對應的顯示名稱/// </summary>/// <param name="enumType">枚舉類型</param>/// <param name="intValue">枚舉項對應的int值</param>/// <returns></returns>public static string GetEnumShowName(Type enumType, int intValue){return EnumToDictionary(enumType)[intValue];} }?想更偷懶的話,還可以省掉自定義的EnumShowNameAttribute,直接用System.ComponentModel.DescriptionAttribute就行了。

?

[附]Enum基礎知識:

  • c# 枚舉 enum
  • .NET中Flags枚舉的使用
  • 關于枚舉的種種 (Enumeration FAQ) [C#, IL, BCL]

轉載于:https://www.cnblogs.com/wenjian/archive/2009/06/19/1506550.html

總結

以上是生活随笔為你收集整理的将枚举值转换为DropDownList等的选项值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色哟哟入口国产精品 | 杂技xxx裸体xxxx欧美 | 成人一级影片 | av网址在线免费观看 | 天天狠天天干 | 嫩草视频91 | 国产精品美女在线观看 | 亚洲天堂av在线播放 | 国产吞精囗交久久久 | 久久久久美女 | 亚洲精选91 | 久久免费片 | 999资源站 | 欧美视频在线观看免费 | 色噜噜日韩精品欧美一区二区 | 国产va视频 | 美腿丝袜亚洲综合 | 欧美久久久久久久久久 | 蜜桃av噜噜一区二区三区小说 | 一区免费视频 | 一个人看的www日本高清视频 | 久久久不卡 | 国产欧美高清 | 一级美女黄色片 | 黄色日批视频 | 极品少妇视频 | 成人片黄网站久久久免费 | 国产精品一区麻豆 | 无码久久av一区二区三区 | 亚洲乱子伦 | www.99色| 亚洲国产精品无码久久 | 黄色三级三级三级三级 | 夜夜撸 | 亚洲乱码国产乱码精品精的特点 | 亚洲 欧美 变态 另类 综合 | av黄| 欧美激情精品久久久久 | 久久毛片视频 | 国产精品白丝喷水在线观看 | 日本一级片免费看 | 夜夜嗨影院 | 国产午夜性春猛交ⅹxxx | 丁香在线视频 | 久热一区| 国产精品一区二区三区高潮 | 在线观看亚洲国产 | 欧美视频一区二区三区四区 | 免费看国产黄色片 | 国产伦乱 | 欧美被狂躁喷白浆精品 | 日本极品丰满ⅹxxxhd | 国产精品久久av无码一区二区 | 久久久久国产精品熟女影院 | 欧美不卡一区 | 天天干天天做天天操 | 人妻精品一区二区在线 | 欧美男人天堂网 | 都市激情一区 | 色噜噜在线 | 亚洲爽爽爽 | 美女啪啪无遮挡 | 国产日韩欧美在线观看 | 精品国产乱码久久久久久影片 | 午夜激情福利电影 | 国产在线区 | 亚洲一区二区三区四区五区xx | 日韩久久一区二区三区 | 爱草在线视频 | 综合久久综合 | 999久久| 黄色三级带 | av黄色影院 | 日韩欧美小视频 | 激情午夜天 | 亚洲精品福利网站 | 五月婷婷丁香网 | 性欧美丰满熟妇xxxx性久久久 | 国产成人精品一二三区 | 欧美视频 | 亚洲精品97久久中文字幕 | 黑人性高潮 | 亚洲人人人 | 丁香六月综合激情 | 欧美在线一二三 | 久久午夜av | 成人午夜视频免费在线观看 | 9191av| 久久精工是国产品牌吗 | 中文字幕无码不卡免费视频 | 妞干网av| 国产又黄又猛又爽 | 中文字幕精品一二三四五六七八 | 葵司av电影 | 中文字幕一区二区三区在线不卡 | 香蕉视频官方网站 | 一道本在线观看视频 | 啦啦啦av| 欧美乱论视频 |