【问题标题】:Not able to set SelectedValue for DropDownList无法为 DropDownList 设置 SelectedValue
【发布时间】:2010-11-28 20:29:51
【问题描述】:

这是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) ;

我的想法已经不多了。

【问题讨论】:

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


    【解决方案1】:

    哇,你让这种方式变得比它需要的更复杂。不要对 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 事件。

    【讨论】:

      【解决方案2】:

      我过去曾遇到过这个问题。我相信我解决这个问题的方法是在下拉列表中找到该项目并将 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;
      

      【讨论】:

        猜你喜欢
        • 2012-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-29
        相关资源
        最近更新 更多