将枚举集合(List <enum>)绑定到DropDownList的最佳方法是什么?</enum>

时间:2011-04-03 05:23:22

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

如果我有以下枚举

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,我们会将其作为belllow

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

还有其他最好的方法来执行此绑定吗?

1 个答案:

答案 0 :(得分:3)

绑定是设置数据源和绑定,而不是将项添加到列表中,您要查找的是(假设这是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();

澄清我并不主张对此列表进行硬编码,并且可能会从数据库和缓存中加载它,但我真的只能在这里猜测你的要求。