C# 什么';将枚举集合(List<;Enum>;)绑定到DropDownList的最佳方法是什么?

C# 什么';将枚举集合(List<;Enum>;)绑定到DropDownList的最佳方法是什么?,c#,generics,enums,drop-down-menu,bind,C#,Generics,Enums,Drop Down Menu,Bind,如果我有以下枚举 enum RequestStatus { Open = 1, InProgress = 4, Review = 7, Accepted = 11, Rejected = 12, Closed = 23 } 我们有以下列表 List<RequestStatus> nextStatus = new List<RequestStatus>(); n

如果我有以下枚举

enum RequestStatus
    {
        Open = 1,
        InProgress = 4,
        Review = 7,
        Accepted = 11,
        Rejected = 12,
        Closed = 23
    }
我们有以下
列表

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

还有其他最好的绑定方法吗?

绑定是设置数据源和绑定,而不是将项目添加到列表中,您要查找的是(假设这里是ASP.NET表单):

话虽如此,我认为这是相当糟糕的用户友好性,因为我当然不想看到下拉列表中的“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();

为了澄清这一点,我不主张硬编码此列表,可能会从DB和缓存加载此列表,但我真的只能在这里猜测您的需求。

我认为您将从了解标志枚举中获益:您使用的是什么框架?ASP.NET?WPF?银灯?WinForms?@Dave White:asp.net.net 3.5哪个演示框架?一个答案假设ASP.NET(不是MVC),但我没有看到您指定哪个。
dropdownlist.DataSource = Enum.GetNames(typeof(RequestStatus))
dropdownlist.DataBind();
var items = new[] {{ID = "Review", DisplayName = "Review"}, {ID = "InProgress", DisplayName="In Progress"}};
dropdownlist.DataSource = items;
dropdownlist.DataValueField = "ID";
dropdownlist.DataTextField = "DislayName";
dropdownlist.DataBind();