我有一个以这种方式绑定的下拉列表:
protected void Page_Load(object sender, EventArgs e)
{
//Can't write !Page.IsPostBack because this is a User control witch doesn't
//exist at page load
if (ddlConditionType.Items.Count == 0)
PopulateDDL();
}
private void PopulateDDL()
{
MyDdl.DataSource = MyObjectList; //Containing A, B, C
MyDdl.DataBind();
MyDdl.Items.Insert(0, new ListItem(String.Empty, String.Empty));
}
预期结果是下拉这些项目:
或实际结果是
我已设置AppendDataBoundItems = true
,这就是结果:
看起来它第一次绑定ddl,添加项目,然后再次重新绑定它。当然,我的项目中没有其他地方可以再次绑定ddl。
现在我找到了一个解决方法如下:
MyObjectList.Insert(0,new MyObject()); //Wich will result in a empty ddl item
MyDdl.DataSource = MyObjectList;
MyDdl.DataBind();
我想了解那里发生的事情。
答案 0 :(得分:0)
在DataBind之前使用Clear Method
MyDdl.Items.Clear();
你在哪里绑定下拉列表?在页面加载? 如果你想在Page_Load上绑定你的下拉列表,你已经检查了回发状态:
if (!Page.IsPostBack)
{
MyDdl.DataSource = MyObjectList; //Containing A, B, C
MyDdl.DataBind();
MyDdl.Items.Insert(0, new ListItem(String.Empty, String.Empty));
}
答案 1 :(得分:0)
嗨,这是因为你没有把你的方法放在回发中,就像这样
if (!IsPostBack)
{
PopulateDDL();
}
答案 2 :(得分:0)
在您的页面上:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
MyUserControl.PopulateDDL();
}
}
在您的用户控件
public void PopulateDDL()
{
MyDdl.DataSource = MyObjectList; //Containing A, B, C
MyDdl.DataBind();
MyDdl.Items.Insert(0, new ListItem(String.Empty, String.Empty));
}