动态生成的按钮事件为什么没有执行?
//那个按钮是在点击某个树节点后自动生成的,但是运行程序后,那个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写个函数,然后再调用吗?晕!