c# - 无法为 DropDownList 设置 SelectedValue

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

我的想法用完了。

最佳答案

哇哦,你让这种方式变得比它需要的更复杂。不要在 ItemDataBound 上执行此操作,而应在控件的 DataBinding 属性上执行此操作。

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

<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();
}

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

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

编辑:我也已将此信息添加到您的其他问题中,因此如果将来发现它,其他人不会为此目的使用 ItemBound 事件。

关于c# - 无法为 DropDownList 设置 SelectedValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1433683/

相关文章:

c# - 在 SpecFlow 步骤文件中使用依赖注入(inject)

c# - 如何使我的所有输出以及我的光标都集中在 Visual Studios 中?

c# - VS 2017 ASP.NET Core 测试项目 - Microsoft.AspNetCore.Identity 缺失

c# - 我哪里错了?动态创建标签 c#

asp.net - WebImage和大量内存消耗

c# - 为什么调用 WindsorContainer 的 AddComponent 时要使用 key 参数?

c# - 在c#中将动态对象转换为动态类型的数组

asp.net - 如何通过 Visual Studio 2008 在 Firefox 中调试 JavaScript?

ASP.NET/IIS6 : How to search the server's mime map?

c# - DotNetZip 从其他 zip 的子集创建 zip