c# - 绑定(bind)一个下拉列表,然后添加一个新的列表项

标签 c# asp.net sharepoint web-parts

我有一个 DropDownList,在将其添加到 Controls 集合之前,我在名为 CreateChildControls 的函数中对其进行了初始化。然后我覆盖 Render() 方法,然后呈现 DropDownList。 Web 部件继承自 System.Web.UI.WebControls.WebParts.WebPart

我像这样在我的 Web 部件中绑定(bind) DropDownList:

private void BindClientTypes()
{
    DataTable dt = DB.GetAllClientTypes();

    if (dt == null)
    {
        ltGlobalErrorMsg.Text = GlobalErrorMessage;
        ltGlobalErrorMsg.Visible = true;
    }
    else
    {
        ddlClient.DataSource = dt;
        ddlClient.DataValueField = "ID";
        ddlClient.DataTextField = "Name";
        ddlClient.DataBind();
        ddlClient.Items.Insert(0, PleaseSelectItem);
    }
}

如果我尝试在调用 DataBind 后设置 DropDownListSelectedIndex,我会收到一个错误,指出控件不能有多个选择项目。

该代码工作正常,如果我注释掉这一行,我可以在数据绑定(bind)后设置 SelectedIndex:

ddlClient.Items.Insert(0, PleaseSelectItem);

谁能解释为什么这行不通?

谢谢。

最佳答案

ddl.Items.Add(new ListItem("yourtext", "yourvalue"));

当您设置“selected”属性时,您将其设置为该 ListItem 的实例,因此如果您有更多要重复使用的 ListItem,那么它们将获得相同的值,这可能会导致您遇到的问题。

为了说明这个问题,请看这个有 2 个下拉列表的例子:

ListItem item1 = new ListItem("1", "1");
ListItem item2 = new ListItem("2", "2");
ListItem item3 = new ListItem("3", "3");

ddlTest.Items.Add(item1);
ddlTest.Items.Add(item2);
ddlTest.Items.Add(item3);

ddlTest2.Items.Add(item1);
ddlTest2.Items.Add(item2);
ddlTest2.Items.Add(item3);

ddlTest2.SelectedValue = "2";

设置 ddlTest2 的选定值实际上也设置了 ddlTest,因为它们共享相同的项目列表。如果您运行此麻烦,ddlTestddlTest2 将具有完全相同的选定值,即使仅设置了 ddlTest2

关于c# - 绑定(bind)一个下拉列表,然后添加一个新的列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1776513/

相关文章:

java - JAX-WS Sharepoint 401 未经授权的 NTLM

c# - 覆盖 MD5 以使其通过 FIPS 验证?

c# - 在向订阅者提供服务之前和之后修改 C# 中的 Rx 事件

asp.net - 如何处理从类型 'DBNull' 到类型 'String' 的转换无效

asp.net - 一个页面只能有一个服务器端表单标签..但我需要 2 个

c# - 用于删除站点操作菜单项的 Sharepoint 自定义操作

c# - 如何使用 AutoMapper 映射子对象?

c# - 使用最小起订量模拟具有泛型参数的类型

c# - 使用 HtmlAgilityPack 设置文本区域值

javascript - 如何在 SharePoint 2013 Online 中使用 JavaScript 动态创建母版页文件?