从服务器端添加下拉列表

时间:2015-05-08 11:53:13

标签: c# asp.net

我有以下代码:

<asp:DropDownList ID="dd_SubCategory" Width="160px" runat="server" DataTextField="CATEGORY_NAME" DataValueField="CATEGORY_ID"></asp:DropDownList>&nbsp;
<br />
<asp:Panel ID="pnl_SubCatg" runat="server"></asp:Panel>

<asp:ImageButton ID="Ib_AddSubCategory" runat="server" OnClick="Ib_AddSubCategory_Click" ImageUrl="/images/add.gif" />

 protected void Ib_AddSubCategory_Click(object sender, ImageClickEventArgs e)
{
    string SelectedCategory="";
    if (ctrl_list.Count == 0)
        SelectedCategory = dd_SubCategory.SelectedValue;
    else
        SelectedCategory = Session["Selected_SubCatg"] != null && Session["Selected_SubCatg"].ToString()!=""?Session["Selected_SubCatg"].ToString():((DropDownList)ctrl_list[ctrl_list.Count - 1]).SelectedValue;
    try
    {


        DataRow[] Rows = DataHelper.TicketCategories.Select("PARENT_CATEGORY_ID='" + SelectedCategory + "'");

        if (Rows.Length > 0)
        {
            AddSubCategory(Rows);

        }
        foreach (Control item in ctrl_list)
            pnl_SubCatg.Controls.Add(item);
    }
    catch (Exception ex)
    { }


}
 List<Control> _ctrl_list = null;
List<Control> ctrl_list {
    get
    {
        if (Session["SUB_CATG_LIST"] == null)
        {
            _ctrl_list = new List<Control>();
            Session["SUB_CATG_LIST"] = _ctrl_list;
        }
        return Session["SUB_CATG_LIST"] as List<Control>;
    }
}
  protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Session["SUB_CATG_LIST"] = null;
        Session["Selected_SubCatg"] = null;
    }
    if (ctrl_list.Count > 0)
    {
        foreach (Control item in ctrl_list)
            pnl_SubCatg.Controls.Add(item);
    }
 }
  private void AddSubCategory(DataRow [] Rows)
{

    DropDownList dd_SubCategory1 = new DropDownList();
    dd_SubCategory1.Width = Unit.Pixel(160);
    dd_SubCategory1.DataTextField = "CATEGORY_NAME";
    dd_SubCategory1.DataValueField = "CATEGORY_ID";
    dd_SubCategory1.ID = Guid.NewGuid().ToString();
    dd_SubCategory1.DataSource = Rows.CopyToDataTable();
    dd_SubCategory1.DataBind();
    dd_SubCategory1.SelectedIndexChanged += dd_SubCategory1_SelectedIndexChanged;
    dd_SubCategory1.AutoPostBack = true;
    ctrl_list.Add(dd_SubCategory1);

}

void dd_SubCategory1_SelectedIndexChanged(object sender, EventArgs e)
{
    Session["Selected_SubCatg"] = ((DropDownList)sender).SelectedValue;

}

我正在尝试添加一个下拉列表,其中包含上次插入的下拉列表的子类别,我的问题是dd_SubCategory1_SelectedIndexChanged没有触发,我无法获取和selectedValue最后dropdownlist始终是相同的

1 个答案:

答案 0 :(得分:1)

这是因为它是动态生成的,并且在页面上呈现后会丢失其状态。

要访问下拉列表及其相关事件和属性,您需要在每次页面回发时重新创建它。

希望它足够清楚。