//======================================================================
// 版權所有:Copyright (C) 2010
// 版 本:2.0.50727.3615
// 文件名稱:EnumToCollections
// 模塊名稱:
// 功 能:
//
//
//
// 作 者:// 創建時間:2011/3/25 15:28:18
// 修改時間:
//======================================================================
using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
/// <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 sealed class EnumUtil
{
private static Dictionary<string, Dictionary<int, string>> _EnumList = new Dictionary<string, Dictionary<int, string>>(); //枚舉緩存池
private static Dictionary<string, Dictionary<long, string>> _LEnumList = new Dictionary<string, Dictionary<long, 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<int, string>
/// 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];
}
public static Dictionary<long, string> LEnumToDictionary(Type enumType)
{
string keyName = enumType.FullName;
if (!_LEnumList.ContainsKey(keyName))
{
Dictionary<long, string> list = new Dictionary<long, string>();
foreach (long 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 (!_LEnumList.ContainsKey(keyName))
{
lock (syncObj)
{
if (!_LEnumList.ContainsKey(keyName))
{
_LEnumList.Add(keyName, list);
}
}
}
}
return _LEnumList[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];
}
public static string GetLEnumShowName(Type enumType, long intValue)
{
return LEnumToDictionary(enumType)[intValue];
}
}
上面爲公共類
//======================================================================
// 版權所有:Copyright (C) 2010
// 版 本:2.0.50727.3615
// 文件名稱:EmunCardState
// 模塊名稱:
// 功 能:該枚舉不可更改
//
//
//
// 作 者:
// 創建時間:2011/5/13 11:13:14
// 修改時間:
//======================================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public enum EnumCardState : long
{
[EnumShowName("生產")]
GanerCarNo = 1,
[EnumShowName("加工")]
CardApply = 2,
}
以上爲枚舉類型
///綁定下拉列表信息
private void DataBindList()
{
ddlList.DataSource = EnumUtil.LEnumToDictionary(typeof(EnumCardState));
ddlList.DataTextField = "value";
ddlList.DataValueField = "key";
ddlList.DataBind();
}
///列出相應的名稱
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = EnumUtil.GetLEnumShowName(typeof(EnumCardState), int.Parse(ddlList.SelectedValue));
}