绑定下拉列表然后添加新的列表项

时间:2009-11-21 19:38:55

标签: c# asp.net sharepoint web-parts

我有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

有谁可以解释为什么这不起作用?

感谢。

2 个答案:

答案 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,因为它们共享相同的项目列表。如果您运行此麻烦ddlTestddlTest2将具有完全相同的选定值,即使只设置了ddlTest2

答案 1 :(得分:1)

PleaseSelectItem在哪里宣布?如果您将listitem的相同实例添加到许多下拉列表中,则可能会出现此问题。