protected void AddDropList(int pid, int i)
        {
            DataTable dt = gbll.GetList("ParentID=" + pid).Tables[0];
            if (dt.Rows.Count > 0)
            {
                DropDownList drp = new DropDownList();
                drp.ID = "drpGroup" + i;
                drp.AutoPostBack = true;
                drp.SelectedIndexChanged += new EventHandler(drp_SelectedIndexChanged);                drp.DataSource = dt;
                drp.DataTextField = "GrpName";
                drp.DataValueField = "ID";                drp.DataBind();
                tbProduct.Rows[0].Cells[1].Controls.Add(drp);                AddDropList(Convert.ToInt32(dt.Rows[0]["ID"]), i + 1);
            }        }        public void drp_SelectedIndexChanged(object sender, EventArgs e)
        {
            int id = Convert.ToInt32(drpGroup1.SelectedValue);
            int classnum = GetClassNum(id, 2);
            DropDownList drp = Page.FindControl("drpGroup" + classnum) as DropDownList;
            AddDropList(id, classnum);
        }

解决方案 »

  1.   

    DropDownList 添加 AutoPostBack="true" 了吗
      

  2.   

     drp.SelectedIndexChanged += new EventHandler(drp_SelectedIndexChanged);每次访问都有加一下,这个是不能自动保存状态的。一般都习惯在 if (!Postback()) 里面对列表框进行设置,但是对于这种情况,只在这里设置是不行的就是说 页面回发的时候也有注册一下事件。
      

  3.   

    设置为true了、你看下代码、里面有设置为true,设置断点调试时候不会进入那个事件
      

  4.   

    我这里的这个drp是后台自动添加的一个下拉列表控件,添加的下拉列表的个数是跟菜单的等级数相关联的、
      

  5.   

    你选择一个选项后,没有创建那个下拉列表框,也没有加事件。所以我说了,你每次都要加下拉列表框和事件。你设置断点,看看 选择一个选项后,有没有执行过  DropDownList drp = new DropDownList(); 这部分代码,如果没有执行过,那就没有下拉列表框,更没有事件。因为你自己new出来的控件,是不会自动保存状态的。回发的时候不处理,就会“消失”