Получение идентификатора перечисления, который я привязал к выпадающему списку

#c#

#c#

Вопрос:

У меня есть набор перечислений, привязанных к выпадающему списку.

 ((DropDownList)control).DataSource = DefaultSync;
((DropDownList)control).DataBind();
  

Здесь Defaultsync — это список, содержащий 2 перечисления.

 List<MyEnum> DefaultSync=(List<SyncRequestTypeEnum>)(Enum.GetValues(typeof(SyncRequestTypeEnum)).Cast<SyncRequestTypeEnum>().Except(new SyncRequestTypeEnum[] { SyncRequestTypeEnum.ProjectLevel })).ToList();
  

Теперь я хотел получить идентификатор перечисления на основе пользовательского выбора выпадающего списка.
Я использовал следующий код, но он выдает ошибку, поскольку список не содержит для него значения.

 public int EnumID
{
    get
    {
        return Convert.ToInt32(ddlselection.Selectedvalue);
    }
    set
    {
        ddlselection.SelectedValue = Convert.ToString(value);
    } 
}
  

Может кто-нибудь помочь в этом?

Ошибка: ‘ddlselection имеет значение SelectedValue, которое недопустимо, поскольку оно не существует в списке элементов. Имя параметра: значение

Комментарии:

1. Какую ошибку вы получаете?

Ответ №1:

Чтобы использовать SelectedValue свойство, вам нужно указать, какое свойство вашего элемента данных является свойством value, а какое — отображаемым текстом. Я бы предложил изменить ваш код на что-то вроде этого:

 var list = control as DropDownList;
list.DataSource = Enum.GetValues(typeof(SyncRequestTypeEnum))
    .Cast<SyncRequestTypeEnum>()
    .Except(/*..*/)
    .Select(x => new KeyValuePair<SyncRequestTypeEnum, string>(x, x.ToString())
    .ToList();
list.DataValueField = "Key";
list.DataTextField = "Value";
list.DataBind();
  

И ваше свойство должно работать нормально.

Другой пример и более подробное объяснение в MSDN.