动态添加的按钮不响应事件

gufans 2007-11-27 10:08:24
protected void Page_Load(object sender, EventArgs e)
{
AddControl();
}
protected void AddControl()
{
this.Panel1.Clear();
Button btnTest = new Button();
btnTest.Click += new EventHandler(btnTest_Click);
this.Panel1.Controls.Add(btnTest); \\这个Panel1是已经拉到页面上去了的
}
void btnTest_Click(object sender, EventArgs e)
{
int i=0;
}
void btnAdd_Click(object sender, EventArgs e)
{
AddControl(); \\这个事件源按妞也是已经拉到页面上去了的
}
点击页面上的Add按钮后想用AddControl()方法动态添加一个按钮,但动态添加的这个按妞click事件不会响应 怎么解决?好象网上有很多人问到这个问题 但都没有答案
...全文
159 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
root_ 2007-11-28
  • 打赏
  • 举报
回复
那一行是因为看你的代码里有,以为你需要,所以加上的,没什么影响

datasource.count这个值是怎么得到的,PostBack后能否保留,如果不能,用ViewState保存一下

ViewState["Count"] = datasource.count;


然后再
protected void Page_Load(object sender, EventArgs e) 
{
for(int i=0;i<Convert.ToInt32(ViewState["Count"]);i++)
{
AddControl();
}
}
gufans 2007-11-28
  • 打赏
  • 举报
回复
@_root

我的控件是根据数据源的count来动态生成的,和你的方法一样 但在点击第一次的时候依然不能响应事件
protected void Page_Load(object sender, EventArgs e)
{
AddControl(); \\我的代码里是没有这一句的 难道是这一句的关系?
for (int i = 0; i < datasource.count; i++)
{
AddControl();
}

}
root_ 2007-11-28
  • 打赏
  • 举报
回复
问题是你这个DateSet是每次PostBack后都重新获取吗,如果是,那应该是没问题的,如果只是第一次加载时获取的,那么PostBack之后就不保存了,你断点看下就知道了

如果还有问题,贴下你Page_Load里的完整代码
gufans 2007-11-28
  • 打赏
  • 举报
回复
@ root_

datasource是一个DATASET postback的时候DateSet肯定是一样的
应该是for(int i=0;i<DateSet.tables[0].Count;i++)
{
AddControl();
}
世界因你而小 2007-11-28
  • 打赏
  • 举报
回复
mark
ncjmc 2007-11-27
  • 打赏
  • 举报
回复
OnInit错了:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
btnTest = new Button();
btnTest.Click += new EventHandler(btnTest_Click);
}
ncjmc 2007-11-27
  • 打赏
  • 举报
回复
以前做过,现在不记得,好象这样可以,不过没测试,供参考:

protected Button btnTest;
protected override void OnInit(EventArgs e)
{
btnTest = new Button();
btnTest.Click += new EventHandler(btnTest_Click);
}
protected void Page_Load(object sender, EventArgs e)
{
AddControl();
}
protected void AddControl()
{
this.Panel1.Clear();
this.Panel1.Controls.Add(btnTest); \\这个Panel1是已经拉到页面上去了的
}
void btnTest_Click(object sender, EventArgs e)
{
int i=0;
}
void btnAdd_Click(object sender, EventArgs e)
{
AddControl(); \\这个事件源按妞也是已经拉到页面上去了的
}
root_ 2007-11-27
  • 打赏
  • 举报
回复
动态添加的控件在PostBack的时候也需要再次添加

    protected void Page_Load(object sender, EventArgs e)
{
AddControl();
if (ViewState["Count"] != null)
{
for (int i = 0; i < Convert.ToInt32(ViewState["Count"]); i++)
AddControl();
}
}
protected void AddControl()
{
Button btnTest = new Button();
btnTest.Text = "Test";
btnTest.Click += new EventHandler(btnTest_Click);
this.Panel1.Controls.Add(btnTest);
}

static int i = 0; //测试效果
void btnTest_Click(object sender, EventArgs e)
{
i = i + 1;
Response.Write(i);
}

protected void btnAdd_Click(object sender, EventArgs e)
{
AddControl();
ViewState["Count"] = Convert.ToInt32(ViewState["Count"]) + 1;
}


ncjmc 2007-11-27
  • 打赏
  • 举报
回复

protected override void OnInit(EventArgs e)
{
}
中加入事件可以响应的
suyiming 2007-11-27
  • 打赏
  • 举报
回复
protected   void   Page_Load(object   sender,   EventArgs   e) 
{
AddControl();
}
//改为这样试试
protected void Page_Load(object sender, EventArgs e)
{
if(!ispostback)
{
AddControl();
}
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧