动态添加DropDownList

时间:2012-02-01 04:01:13

标签: c# asp.net drop-down-menu webforms

我正在尝试动态添加下拉列表。 没有错误,除了我没有看到下拉列表 这是代码:

protected void Page_Load(object sender, EventArgs e)
{
    if(Ispostback)
    {
        DropDownList ddlPercent = new DropDownList();
        ddlPercent .ID = "ddlDiscountPercent";
        ddlPercent .AutoPostBack = true;
        Panel1.Controls.Add(ddlPercent );
        ddlPercent .ID = "ddlPercent " + 1;
        ddlPercent .Items.Add(new ListItem("5", "5%"));
        ddlPercent .Items.Add(new ListItem("10", "10%"));
        ddlPercent .Items.Add(new ListItem("15", "15%"));
        ddlPercent .Items.Add(new ListItem("20", "20%"));
        ddlPercent .Items.Add(new ListItem("30", "30%"));
        ddlPercent .Items.Add(new ListItem("50", "50%"));

        ddlPercent.SelectedIndexChanged += 
                  new EventHandler(ddlPercent_SelectedIndexChanged);

        ContentPlaceHolder cph = 
                  (ContentPlaceHolder)this.Master.FindControl("MainContent");
        cph.Controls.Add(ddlPercent );
        // ddlPercent.SelectedIndex =(Int32) ViewState["ddl_index"];
    }
}

protected void ddlPercent_SelectedIndexChanged(object sender, EventArgs e)
{
     DropDownList ComboBox=(DropDownList)sender;
     ViewState["ddl_index"] = ComboBox.SelectedValue;        
}

3 个答案:

答案 0 :(得分:2)

问题可能在于您没有及早将控件添加到页面。需要在页面生命周期的早期添加控件以使其事件处于捆绑状态。

你在Load事件中这样做,为时已晚。尝试在Init事件期间添加它或覆盖CreateChildControls方法。

并确保在每个页面请求(包括回发)上执行此操作。

希望这适合你。

答案 1 :(得分:0)

似乎是因为IsPostBack条件,只有在重新发布页面或触发事件时才会运行此代码。

答案 2 :(得分:0)

  1. 将该代码移至OnInit(Page_Init)
  2. 在向控件树添加控件时删除if(Ispostback)检查。在动态添加控件时,几乎从不你需要注意回发状态。