我有一组绑定到下拉列表的枚举。
((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();
现在我想根据下拉列表的用户选择获取枚举的id。 我使用了下面的代码,但它给出了一个错误,因为列表中没有包含它的值。
public int EnumID
{
get
{
return Convert.ToInt32(ddlselection.Selectedvalue);
}
set
{
ddlselection.SelectedValue = Convert.ToString(value);
}
}
有人可以为此提供帮助吗?
错误是: &#39; ddlselection有一个SelectedValue,它是无效的,因为它在项目列表中不存在。 参数名称:值
答案 0 :(得分: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的另一个例子和更详细的解释。