我有DropDownList
我在名为CreateChildControls
的函数中初始化,然后将其添加到Controls
集合中。然后我覆盖Render()
方法,然后渲染DropDownList
。 Web部件继承自System.Web.UI.WebControls.WebParts.WebPart
。
我将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);
}
}
如果我在调用SelectedIndex
后尝试设置DropDownList
的{{1}},则会收到错误消息,指出控件不能包含多个所选项目。
该代码工作正常,如果我注释掉这一行,我可以在数据绑定后设置DataBind
:
SelectedIndex
有谁可以解释为什么这不起作用?
感谢。
答案 0 :(得分:3)
ddl.Items.Add(new ListItem("yourtext", "yourvalue"));
当您设置'selected'属性时,您将其设置为该ListItem的实例,因此如果您有更多的ListItems正在重用,那么它们将获得相同的值,这可能会导致您遇到的问题。
为了说明问题,请参阅此示例,其中包含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
。
答案 1 :(得分:1)
PleaseSelectItem在哪里宣布?如果您将listitem的相同实例添加到许多下拉列表中,则可能会出现此问题。