在开发过程中一些状态的表示使用到枚举类型,那么如何将枚举类型直接绑定到ListControl(DropDownList)是本次的主题,废话不多说了,直接代码:
首先看工具类代码:
/// <summary>
/// 通过枚举类型 绑定到ListControl 控件的通用类
/// 用法:直接传入要绑定的Control: EnumManager<枚举>.Bind_Enum_Control(ListControl);
/// </summary>
/// <typeparam name="TEnum"></typeparam>
public static class EnumManager<TEnum> where TEnum : struct, System.IConvertible
{
private static readonly System.Collections.Generic.Dictionary<string, System.Collections.Generic.Dictionary<int, string>> EnumDictionary = new System.Collections.Generic.Dictionary<string, System.Collections.Generic.Dictionary<int, string>>(); /// <summary>
/// 获取枚举
/// </summary>
/// <returns></returns>
public static System.Collections.Generic.Dictionary<int, string> GetEnumDictionary()
{
if (EnumDictionary.ContainsKey(typeof(TEnum).FullName))
return EnumDictionary[typeof(TEnum).FullName]; var EnumDict = Add_Enum_To_Diconary();
return EnumDict; }
/// <summary>
/// 传入控件进行绑定
/// </summary>
/// <param name="control"></param>
public static void Bind_Enum_Control(System.Web.UI.WebControls.ListControl control)
{
control.DataSource = GetEnumDictionary();
control.DataTextField = "value";
control.DataValueField = "key";
control.DataBind();
}
/// <summary>
/// 通过key获取Enum的值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string GetEnumValue(int key)
{
if (EnumDictionary.ContainsKey(typeof(TEnum).FullName))
return EnumDictionary[typeof(TEnum).FullName][key];
var EnumDic = Add_Enum_To_Diconary();
return EnumDic[key];
} private static System.Collections.Generic.Dictionary<int, string> Add_Enum_To_Diconary()
{
System.Type t = typeof(TEnum);
string[] _names = System.Enum.GetNames(t);
int[] _values = System.Enum.GetValues(t) as int[];
System.Collections.Generic.Dictionary<int, string> EnumDict = new System.Collections.Generic.Dictionary<int, string>(); for (int i = ; i < _values.Length; i++)
{
EnumDict.Add(_values[i], _names[i]);
} EnumDictionary.Add(t.FullName, EnumDict);
return EnumDict;
}
}
工具类的使用 新建一个WebForm1.aspx页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Test_ToFixed.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
测试将枚举类型数据绑定到下拉列表:
<asp:DropDownList runat="server" ID="ddl"/>
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace Test_ToFixed
{
public enum Status
{
审核失败 = ,
未审核 = ,
审核中 = ,
已审核 =
} public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Common.EnumManager<Status>.Bind_Enum_Control(this.ddl); //将枚举类型绑定到DropDownList控件
this.ddl.Items.Insert(, new ListItem("请选择", "-1"));
}
}
}
}
效果: