【问题标题】:What's Best way to Bind collection of Enums ( List<Enum> ) to a DropDownList?将枚举集合( List<Enum> )绑定到 DropDownList 的最佳方法是什么?
【发布时间】:2011-04-03 05:23:21
【问题描述】:

如果我有以下枚举

enum RequestStatus
    {
        Open = 1,
        InProgress = 4,
        Review = 7,
        Accepted = 11,
        Rejected = 12,
        Closed = 23
    }

我们有以下List

List<RequestStatus> nextStatus = new List<RequestStatus>();
nextStatus.Add(RequestStatus.Review);
nextStatus.Add(RequestStatus.InProgress);

如果我们想将nextStatus 绑定到dropDownList,我们可以这样做

foreach (RequestStatus req in nextStatus)
    dropDownList.Items.Add(new ListItem(req.ToString(), ((int)req).ToString()));

还有其他最好的方法来进行这种绑定吗?

【问题讨论】:

  • 我认为你会从学习标志枚举中受益:msdn.microsoft.com/en-us/library/ms229062(v=VS.90).aspx
  • 你用的是什么框架? ASP.NET? WPF?银光? WinForms?
  • @Dave White: asp.net .net 3.5
  • 哪个表示框架?一个答案假设 ASP.NET(不是 MVC),但我没有看到你指定哪个。

标签: c# generics enums drop-down-menu bind


【解决方案1】:

绑定是设置数据源和绑定,而不是向列表中添加项目,你要找的是(假设这里是 ASP.NET Forms):

dropdownlist.DataSource = Enum.GetNames(typeof(RequestStatus))
dropdownlist.DataBind();

话虽如此,我认为这对用户友好性很差,因为我当然不想在下拉列表中看到“InProgress”。我认为将这些数据与 ID/Name/Key 和 DisplayName 组合存储在某处,然后像这样绑定 ID 和 DisplayName 会更合适:

var items = new[] {{ID = "Review", DisplayName = "Review"}, {ID = "InProgress", DisplayName="In Progress"}};
dropdownlist.DataSource = items;
dropdownlist.DataValueField = "ID";
dropdownlist.DataTextField = "DislayName";
dropdownlist.DataBind();

为了澄清,我不提倡硬编码这个列表,可能会从数据库和缓存中加载它,但我真的只能在这里猜测你的要求。

【讨论】:

    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2011-11-05
    • 2020-07-26
    相关资源
    最近更新 更多