无法为DropDownList设置SelectedValue

时间:2009-09-16 15:22:30

标签: c# .net asp.net data-binding drop-down-menu

这是Populating DropDownList inside Repeater not working的后续内容。

我在转发器中添加了一个下拉列表。现在我需要设置所选的值,但这说起来容易做起来......

这是我的代码:

    protected void criteriaScore_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {

        // This event is raised for the header, the footer, separators, and items.
        // Execute the following logic for Items and Alternating Items.
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {

            DropDownList ddl = (DropDownList)e.Item.FindControl("ddlRating");
            DataRowView drw = (DataRowView)e.Item.DataItem;

            for (int i = 1; i < 6; i++)
            {
                ddl.Items.Add(new ListItem(i.ToString(), i.ToString()));
            }
            ddl.DataBind(); // <- Not sure if this is needed here.
            ddl.SelectedValue = drw.Row["lvl"].ToString();
        }
    }

drw.Row [“lvl”]。ToString()是一个1-5的值。

我尝试过设置SelectedValue和SelectedIndex。

我也试过

ddl.SelectedValue = Convert.ToString(ddl.Items.FindByText(drw.Row["lvl"].ToString()).Value) ;

我的想法已经不多了。

2 个答案:

答案 0 :(得分:7)

哇,你这样做的方式比它需要的更复杂。不要在ItemDataBound上执行此操作,请在控件DataBinding属性上执行此操作。

在您的下拉列表中定义数据绑定事件:

<asp:DropDownList runat="server" ID="ddlYourDDL" OnDataBinding="ddlYourDDL_DataBinding">

然后实现OnDataBinding事件:

protected void ddlYourDDL_DataBinding(object sender, System.EventArgs e)
{
    DropDownList ddl = (DropDownList)(sender);
    for (int i = 1; i < 6; i++)
    {
        ddl.Items.Add(new ListItem(i.ToString(), i.ToString()));
    }

    // Now that the items are all there, set the selected property
    ddl.SelectedValue = Eval("lvl").ToString();
}

您应该尝试在控件级别进行数据绑定,而不是搜索内容并让网格必须知道它包含的内容。每个控件都可以自行处理;)

我不同意您在上一个链接问题中给出的答案,使用ItemBound事件。当某些事物需要影响一个以上的控件时,应该在“项目”级别使用此事件。

编辑:我还将此信息添加到您的其他问题中,因此如果将来找到该信息,则其他人不会将ItemBound事件用于此目的。

答案 1 :(得分:0)

过去我遇到过这个问题。我相信我接近这个的方法是在下拉列表中找到该项目并将selected属性设置为true。

编辑:这是两个例子 - 我更喜欢FindByValue语法...

YourDDL.ClearSelection();
foreach (ListItem item in YourDDL.Items)
{
   if (item.Value == YourString) 
   { 
      item.Selected = true;
      break;
   }
}


YourDDL.Items.FindByValue("1").Selected = true;