获取我已绑定到下拉列表的枚举的ID

时间:2014-06-18 14:01:31

标签: 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();

现在我想根据下拉列表的用户选择获取枚举的id。 我使用了下面的代码,但它给出了一个错误,因为列表中没有包含它的值。

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

有人可以为此提供帮助吗?

错误是: &#39; ddlselection有一个SelectedValue,它是无效的,因为它在项目列表中不存在。 参数名称:值

1 个答案:

答案 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的另一个例子和更详细的解释。