Asp.Net 將枚舉類型(enum)綁定到ListControl(DropDownList)控件


在開發過程中一些狀態的表示使用到枚舉類型,那么如何將枚舉類型直接綁定到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 = 0; 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
    {
        審核失敗 = 0,
        未審核 = 1,
        審核中 = 2,
        已審核 = 3
    }

    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(0, new ListItem("請選擇", "-1"));
            }
        }
    }
}

效果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM