#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.