我有一个 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
后设置 DropDownList
的 SelectedIndex
,我会收到一个错误,指出控件不能有多个选择项目。
该代码工作正常,如果我注释掉这一行,我可以在数据绑定(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,因为它们共享相同的项目列表。如果您运行此麻烦,ddlTest
和 ddlTest2
将具有完全相同的选定值,即使仅设置了 ddlTest2
。
关于c# - 绑定(bind)一个下拉列表,然后添加一个新的列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1776513/