Каков наилучший способ привязать коллекцию Enums (List <Enum>) к DropDownList? - PullRequest
1 голос
/ 03 апреля 2011

Если у меня есть следующее перечисление

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()));

Есть ли другой лучший способ сделать это связывание?

1 Ответ

3 голосов
/ 03 апреля 2011

Привязка - это установка источника данных и привязок, а не добавление элементов в список. То, что вы ищете (предполагается, что это формы ASP.NET здесь):

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();

Чтобы пояснить, я не рекомендую жестко кодироватьсписок и, вероятно, загрузит это из БД и кеша, но я действительно могу только догадываться о ваших требованиях здесь.

...