//那个按钮是在点击某个树节点后自动生成的,但是运行程序后,那个shenPiBtn按钮(有生成动态按钮),但是点击后没有执行事件处理的代码(在最后面的shenPiBtn_Click),比如
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class GM : System.Web.UI.Page
{
    int row = 0;
    GridView gridView1 = new GridView();
    ArrayList arrList = new ArrayList();//保存审批项目名称
    
     
    protected void Page_Load(object sender, EventArgs e)
    {
        //string userID = Session["员工编号"];
        //string userName=Session ["员工姓名"];
        if (!IsPostBack)
        {
            string sql1 = "select 项目名称 from 项目信息 where 完成日期 IS NOT NULL and 开始日期 IS NOT NULL";//历史项目
            string sql2 = "select 项目名称 from 项目信息 where 完成日期 IS NULL and 开始日期 IS NOT NULL ";//当前项目
            string sql3 = "select 项目名称 from 项目信息 where 完成日期 IS NULL and 开始日期 IS NULL";//计划项目
            string sql4 = "select 项目名称 from 项目信息 where 审核通过 IS NULL";//待审项目
            string sql5 = "select 项目名称 from 项目信息 where 审核通过 = 1";//审核通过项目
            string sql6 = "select 项目名称 from 项目信息 where 审核通过 = 0";//审核未通过项目
            string connStr = "Data Source=(local);Initial Catalog=ProjectManagement;Integrated Security=True";            SqlConnection sqlConn = new SqlConnection(connStr);
            SqlCommand sqlCmd = new SqlCommand();            
            sqlCmd.Connection = sqlConn;            sqlConn.Open();
            
#region
            
            sqlCmd.CommandText = sql1;
            SqlDataReader dr = sqlCmd.ExecuteReader();
            while (dr.Read())//填充历史项目
            {
                TreeNode newNode = new TreeNode(dr["项目名称"].ToString());
                TreeView1.FindNode("historyP").ChildNodes.Add(newNode);            }
            dr.Close();
            
            sqlCmd.CommandText = sql2;
            dr = sqlCmd.ExecuteReader();
            while (dr.Read())//填充当前项目
            {
                TreeNode newNode = new TreeNode(dr["项目名称"].ToString());
                TreeView1.FindNode("currentP").ChildNodes.Add(newNode);            }
            dr.Close();            sqlCmd.CommandText = sql3;
            dr = sqlCmd.ExecuteReader();
            while (dr.Read())//填充计划项目
            {
                TreeNode newNode = new TreeNode(dr["项目名称"].ToString());
                TreeView1.FindNode("planP").ChildNodes.Add(newNode);            }
            dr.Close();            sqlCmd.CommandText = sql4;
            dr = sqlCmd.ExecuteReader();
            while (dr.Read())//填充待审项目
            {
                TreeNode newNode = new TreeNode(dr["项目名称"].ToString());
                TreeView1.FindNode("daishenP").ChildNodes.Add(newNode);            }
            dr.Close();            sqlCmd.CommandText = sql5;
            dr = sqlCmd.ExecuteReader();
            while (dr.Read())//填充审核通过项目
            {
                TreeNode newNode = new TreeNode(dr["项目名称"].ToString());
                TreeView1.FindNode("passP").ChildNodes.Add(newNode);            }
            dr.Close();            sqlCmd.CommandText = sql6;
            dr = sqlCmd.ExecuteReader();
            while (dr.Read())//填充待审项目
            {
                TreeNode newNode = new TreeNode(dr["项目名称"].ToString());
                TreeView1.FindNode("noPassP").ChildNodes.Add(newNode);            }
            dr.Close();            #endregion//填充树            sqlConn.Close();
        }
       
    }
    protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
    {
        
        string strProjectName = TreeView1.SelectedNode.Text.Trim ();   
        
        gridView1.RowDataBound += new GridViewRowEventHandler(gridView1_RowDataBound);
        
        form1.Controls.Add(gridView1); ;
        
        Response.Write("<b><center>"+strProjectName+"</b></center>");        switch (strProjectName )
        {
            case "历史项目" :
                gridView1.DataSource = SqlDataSource1;
                gridView1.DataBind();
                row = gridView1.Rows.Count;    
                break ;            case "当前项目":
                gridView1.DataSource = SqlDataSource2;
                gridView1.DataBind();
                row = gridView1.Rows.Count;
                break ;            case "计划项目":
                gridView1.DataSource = SqlDataSource3;
                gridView1.DataBind();
                row = gridView1.Rows.Count;
                break;            case "待审项目":
                gridView1.DataSource = SqlDataSource4;
                gridView1.DataBind();
                row = gridView1.Rows.Count;
                daishenP();
                
                break ;            case "审核通过项目":
                gridView1.DataSource = SqlDataSource5;
                gridView1.DataBind();
                row = gridView1.Rows.Count;
                break ;
            
            case "审核未通过项目":
                gridView1.DataSource = SqlDataSource6;
                gridView1.DataBind();
                row = gridView1.Rows.Count;
                break ;
            default :
                break;
        }        
    }
    protected void gridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        int i;        //执行循环,保证每条数据都可以更新
        
        for (i = -1; i < row; i++)//
        {
            //首先判断是否是数据行
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //当鼠标停留时更改背景色
                e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor;this.style.backgroundColor='#00A9FF'");
                //当鼠标移开时还原背景色
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c");
            }
        }    } //鼠标停留改变GridView行的颜色    protected void daishenP()
    {
        for (int i = 0; i < row; i++)
        {
            Literal lbl1 = new Literal();//换行
            lbl1.Text = "<br>";
            form1.Controls.Add(lbl1);
            string projectName = gridView1.Rows[i].Cells[0].Text;
            arrList.Add(projectName);            Literal newLbl = new Literal();
            newLbl.Text = projectName.PadRight(120, '-');
            form1.Controls.Add(newLbl);            HtmlInputCheckBox cbx = new HtmlInputCheckBox();
            cbx.ID = i.ToString(); 
            form1.Controls.Add(cbx);            Label lbl = new Label();
            lbl.Text = "要通过审批请打钩!";
            form1.Controls.Add(lbl);            Literal lbl2 = new Literal();//添加页面分割线
            lbl1.Text = "<hr>";
            form1.Controls.Add(lbl2);               
        }
        Button shenPiBtn = new Button();
        shenPiBtn.ID = "shenPiBtn";
        shenPiBtn.Text = "通过审批";
        shenPiBtn.Click += new EventHandler(shenPiBtn_Click);
        
        form1.Controls.Add(shenPiBtn); 
    }    protected void shenPiBtn_Click(object sender, EventArgs e)
    {
        //写在这里的代码都不会执行,就是shenPiBtn.Click事件没有执行
    }
  
}

解决方案 »

  1.   

    我新建一个网站,在Page_Load也写一个动态生成的按钮,运行页面后那个按钮却可以响应单击事件。
      

  2.   

    protected void daishenP()
        {
            .............
    ...................... 
    shenPiBtn.Click += new EventHandler(shenPiBtn_Click);       
            form1.Controls.Add(shenPiBtn); 
        }你的daishenP()肯定是要在shenPiBtn_Click里执行的,但你在daishenP()里才绑定事件处理程序不是晚了吗?
      

  3.   

    //上面的代码太长了,其实就是这个问题,动态生成的控件的事件在点击动态控件
    //后没有执行其事件,动态控件本身也在刷新后消失了
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            
            
        }    protected void newBtn_Click(object sender, EventArgs e)
        {
            Response.Write("hi");
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            Button newBtn = new Button();
            newBtn.ID = "aa";
            newBtn.Text = "newBtn111";
            newBtn .Click +=new EventHandler(newBtn_Click);
            form1.Controls.Add(newBtn);    }
    }
      

  4.   

    if (!IsPostBack)
            {
                string sql1 = "select 项目名称 from 项目信息 where 完成日期 IS NOT NULL and 开始日期 IS NOT NULL";//历史项目
                string sql2 = "select 项目名称 from 项目信息 where 完成日期 IS NULL and 开始日期 IS NOT NULL ";//当前项目
                string sql3 = "select 项目名称 from 项目信息 where 完成日期 IS NULL and 开始日期 IS NULL";//计划项目
                string sql4 = "select 项目名称 from 项目信息 where 审核通过 IS NULL";//待审项目
                string sql5 = "select 项目名称 from 项目信息 where 审核通过 = 1";//审核通过项目
                string sql6 = "select 项目名称 from 项目信息 where 审核通过 = 0";//审核未通过项目
                string connStr = "Data Source=(local);Initial Catalog=ProjectManagement;Integrated Security=True";            SqlConnection sqlConn = new SqlConnection(connStr);
                SqlCommand sqlCmd = new SqlCommand();            
                sqlCmd.Connection = sqlConn;            sqlConn.Open();
                
    #region
                
                sqlCmd.CommandText = sql1;
                SqlDataReader dr = sqlCmd.ExecuteReader();
                while (dr.Read())//填充历史项目
                {
                    TreeNode newNode = new TreeNode(dr["项目名称"].ToString());
                    TreeView1.FindNode("historyP").ChildNodes.Add(newNode);            }
                dr.Close();
                
                sqlCmd.CommandText = sql2;
                dr = sqlCmd.ExecuteReader();
                while (dr.Read())//填充当前项目
                {
                    TreeNode newNode = new TreeNode(dr["项目名称"].ToString());
                    TreeView1.FindNode("currentP").ChildNodes.Add(newNode);            }
                dr.Close();            sqlCmd.CommandText = sql3;
                dr = sqlCmd.ExecuteReader();
                while (dr.Read())//填充计划项目
                {
                    TreeNode newNode = new TreeNode(dr["项目名称"].ToString());
                    TreeView1.FindNode("planP").ChildNodes.Add(newNode);            }
                dr.Close();            sqlCmd.CommandText = sql4;
                dr = sqlCmd.ExecuteReader();
                while (dr.Read())//填充待审项目
                {
                    TreeNode newNode = new TreeNode(dr["项目名称"].ToString());
                    TreeView1.FindNode("daishenP").ChildNodes.Add(newNode);            }
                dr.Close();            sqlCmd.CommandText = sql5;
                dr = sqlCmd.ExecuteReader();
                while (dr.Read())//填充审核通过项目
                {
                    TreeNode newNode = new TreeNode(dr["项目名称"].ToString());
                    TreeView1.FindNode("passP").ChildNodes.Add(newNode);            }
                dr.Close();            sqlCmd.CommandText = sql6;
                dr = sqlCmd.ExecuteReader();
                while (dr.Read())//填充待审项目
                {
                    TreeNode newNode = new TreeNode(dr["项目名称"].ToString());
                    TreeView1.FindNode("noPassP").ChildNodes.Add(newNode);            }
                dr.Close();            #endregion//填充树            sqlConn.Close();
            }
           
        }
    ==============================
    不能在!ispostback写个函数,然后再调用吗?晕!