首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

动态生成的按钮事件为什么没有执行?解决办法

2012-02-16 
动态生成的按钮事件为什么没有执行?//那个按钮是在点击某个树节点后自动生成的,但是运行程序后,那个shenPi

动态生成的按钮事件为什么没有执行?
//那个按钮是在点击某个树节点后自动生成的,但是运行程序后,那个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事件没有执行
        }
   
}


[解决办法]
protected void daishenP()
{
.............
......................
shenPiBtn.Click += new EventHandler(shenPiBtn_Click);
form1.Controls.Add(shenPiBtn);
}

你的daishenP()肯定是要在shenPiBtn_Click里执行的,但你在daishenP()里才绑定事件处理程序不是晚了吗?

[解决办法]
不能写在!ispostback里
[解决办法]
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写个函数,然后再调用吗?晕!

热点排行