动态生成Button,事件该怎么写..

liu_lxx 2013-04-03 04:10:51
有一个根据数据多少动态生成的表格,表格中有一列(联系电话)是初次加载时不显示的..

在该列中有一个Button,点击显示联系电话..(Button也是随表格动态添加的.)


现在遇到的问题是:添加的Button按钮添加事件后点击每次都会刷新页面,刷新后动态生成表格不见了..

下面是代码://动态添加第六列..
HtmlTableCell htr1_c6 = new HtmlTableCell();

Panel panel1 = new Panel();
panel1.Visible = true;
Button bt_01 = new Button();
bt_01.Command += new CommandEventHandler(this.bt_01_Click);
bt_01.Text = "显示";
bt_01.CommandName = "bt_01_Click";
bt_01.CommandArgument = i.ToString();
panel1.Controls.Add(bt_01);

Panel panel2 = new Panel();
panel2.Visible = false;
Label lb1 = new Label();
lb1.Text = ds.Tables[0].Rows[i]["LXDH"].ToString().Trim();
Button bt_02 = new Button();
bt_02.Command += new CommandEventHandler(this.bt_02_Click);
bt_02.Text = "隐藏";
bt_02.CommandArgument = i.ToString();
panel2.Controls.Add(lb1);
panel2.Controls.Add(bt_02);

htr1_c6.Controls.Add(panel1);
htr1_c6.Controls.Add(panel2);

htr1.Controls.Add(htr1_c6);

ilist.Rows.Add(htr1);

protected void bt_01_Click(object sender, EventArgs e)
{
//获得传递的参数:按钮所在的表格的行数..
int i = Convert.ToInt32(((Button)sender).CommandArgument);
Response.Write("aaaaaaaaaaa");//用这个测试也没有aaaaaaaaaaa输出在网页上..
((Panel)ilist.Rows[i].Cells[5].Controls[0]).Visible = false;
((Panel)ilist.Rows[i].Cells[5].Controls[1]).Visible = true;
}
protected void bt_02_Click(object sender, EventArgs e)
{
//获得传递的参数:按钮所在的表格的行数..
int i = Convert.ToInt32(((Button)sender).CommandArgument);
((Panel)ilist.Rows[i].Cells[5].Controls[0]).Visible = true;
((Panel)ilist.Rows[i].Cells[5].Controls[1]).Visible = false;
}
...全文
347 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Chobohoo 2013-04-07
  • 打赏
  • 举报
回复
引用 10 楼 qq381334617 的回复:
引用 8 楼 zhuoweizhao 的回复:用个repeater,做下绑定,不就很方便吗? 在repeater内,直接放个<input type="button" id="button1" value="查看联系电话" onclick="在这里写段js代码" /> 这样岂不更便捷. 看来我要恶补下js代码了..这个方法应该可以实现的,无奈..js基……
问题应该解决了吧? 这个是很简单的. 做web开发的,js是一定得学的. 不要求精通,但至少得熟悉
liu_lxx 2013-04-05
  • 打赏
  • 举报
回复
引用 12 楼 baishaoge 的回复:
引用 11 楼 qq381334617 的回复:引用 8 楼 zhuoweizhao 的回复:用个repeater,做下绑定,不就很方便吗? 在repeater内,直接放个<input type="button" id="button1" value="查看联系电话" onclick="在这里写段js代码" /> 这样岂不更便捷. 话说要是涉及到数据……
3Q啦..我先把目前的问题解决了再去试试..我哭,AJAX才刚开始看呢..
liu_lxx 2013-04-05
  • 打赏
  • 举报
回复
引用 13 楼 theforever 的回复:
应该用客户端的JS来作这种在客户端的显示开关功能。如果用服务器控件,自然容易出现这种现象,除非你把在客户端动态操作的行为提交给服务器进行处理,那就没必要地麻烦了。用客户端JS做这个是很容易的,如果你们有专门负责前台JS的,让他做就是了。
3Q..我在想我也必须好好学学js了..
紫帝 2013-04-04
  • 打赏
  • 举报
回复
pageload里面代码如下: protected void Page_Load(object sender, EventArgs e) { if (Request.Cookies["YHYX"] != null && Request.Cookies["YHYX"].Value != "") { string sql_str = string.Format("SELECT GSMC,ZHYE,DKJF,KYYE FROM YH_GS WHERE GSYX='{0}'", Request.Cookies["YHYX"].Value); DataSet ds = WebFunction.dataSet(sql_str); if (ds.Tables[0].Rows[0]["GSMC"] != null) { Lb_gsmc.Text = ds.Tables[0].Rows[0]["GSMC"].ToString().Trim(); } else { Lb_gsmc.Text = "您还未填写您的公司信息.."; } Lb_gsyx.Text = Request.Cookies["YHYX"].Value; Lb_zhye.Text = ds.Tables[0].Rows[0]["ZHYE"].ToString().Trim(); Lb_kyye.Text = ds.Tables[0].Rows[0]["KYYE"].ToString().Trim(); Lb_dkjf.Text = ds.Tables[0].Rows[0]["DKJF"].ToString().Trim(); if (!IsPostBack) { string sql_str1 = string.Format("SELECT ZBJJ,ZXYS,ZBLX,XMLX,ZXMJ,FPFY,FYZT,FBSJ,LXDH,XM,ZBYQ FROM IFO_ZHAOBIAO WHERE FPGSYX='{0}'", Request.Cookies["YHYX"].Value.ToString().Trim()); Create_Table(sql_str1); } } }
  • 打赏
  • 举报
回复
应该用客户端的JS来作这种在客户端的显示开关功能。如果用服务器控件,自然容易出现这种现象,除非你把在客户端动态操作的行为提交给服务器进行处理,那就没必要地麻烦了。用客户端JS做这个是很容易的,如果你们有专门负责前台JS的,让他做就是了。
baishaoge 2013-04-03
  • 打赏
  • 举报
回复
引用 11 楼 qq381334617 的回复:
引用 8 楼 zhuoweizhao 的回复:用个repeater,做下绑定,不就很方便吗? 在repeater内,直接放个<input type="button" id="button1" value="查看联系电话" onclick="在这里写段js代码" /> 这样岂不更便捷. 话说要是涉及到数据库的存储、更新,这个方法就不行了吧.. ……
为什么不可以呢? click事件可以响应AJAX的你要做更新没问题 有问题贴出来
liu_lxx 2013-04-03
  • 打赏
  • 举报
回复
引用 8 楼 zhuoweizhao 的回复:
用个repeater,做下绑定,不就很方便吗? 在repeater内,直接放个<input type="button" id="button1" value="查看联系电话" onclick="在这里写段js代码" /> 这样岂不更便捷.
话说要是涉及到数据库的存储、更新,这个方法就不行了吧..
liu_lxx 2013-04-03
  • 打赏
  • 举报
回复
引用 8 楼 zhuoweizhao 的回复:
用个repeater,做下绑定,不就很方便吗? 在repeater内,直接放个<input type="button" id="button1" value="查看联系电话" onclick="在这里写段js代码" /> 这样岂不更便捷.
看来我要恶补下js代码了..这个方法应该可以实现的,无奈..js基础太差..
liu_lxx 2013-04-03
  • 打赏
  • 举报
回复
引用 6 楼 a346729576 的回复:
引用 2 楼 qq381334617 的回复:自己顶...

现在遇到的问题是:添加的Button按钮添加事件后点击每次都会刷新页面,刷新后动态生成表格不见了..那你就在pageload里面写上动态加载表格的方法啊。推荐生成html控件用js加事件




加过的,页面是这样的,主要是点击几个按钮后自动生成的表格内容及大小是不一样的,
所以用了!ispostback
pageload里面代码如下: protected void Page_Load(object sender, EventArgs e)
{
if (Request.Cookies["YHYX"] != null && Request.Cookies["YHYX"].Value != "")
{

string sql_str = string.Format("SELECT GSMC,ZHYE,DKJF,KYYE FROM YH_GS WHERE GSYX='{0}'", Request.Cookies["YHYX"].Value);
DataSet ds = WebFunction.dataSet(sql_str);

if (ds.Tables[0].Rows[0]["GSMC"] != null)
{
Lb_gsmc.Text = ds.Tables[0].Rows[0]["GSMC"].ToString().Trim();
}
else
{
Lb_gsmc.Text = "您还未填写您的公司信息..";
}

Lb_gsyx.Text = Request.Cookies["YHYX"].Value;
Lb_zhye.Text = ds.Tables[0].Rows[0]["ZHYE"].ToString().Trim();
Lb_kyye.Text = ds.Tables[0].Rows[0]["KYYE"].ToString().Trim();
Lb_dkjf.Text = ds.Tables[0].Rows[0]["DKJF"].ToString().Trim();

if (!IsPostBack)
{
string sql_str1 = string.Format("SELECT ZBJJ,ZXYS,ZBLX,XMLX,ZXMJ,FPFY,FYZT,FBSJ,LXDH,XM,ZBYQ FROM IFO_ZHAOBIAO WHERE FPGSYX='{0}'", Request.Cookies["YHYX"].Value.ToString().Trim());
Create_Table(sql_str1);
}
}
}

我把if (!IsPostBack)去掉之后貌似能用了,但是上面按钮点击每次加载的表格都是一样的了,纠结..

ps:javascript我很菜的啦..
Chobohoo 2013-04-03
  • 打赏
  • 举报
回复
用个repeater,做下绑定,不就很方便吗? 在repeater内,直接放个<input type="button" id="button1" value="查看联系电话" onclick="在这里写段js代码" /> 这样岂不更便捷.
liu_lxx 2013-04-03
  • 打赏
  • 举报
回复
引用 4 楼 tomjun1986 的回复:
button.click+= 不可以么?
嗯,最开始就是用的button.click+=,也不行的.. 我觉得问题主要是在点击按钮后刷新页面表格不见了这里..
夜色镇歌 2013-04-03
  • 打赏
  • 举报
回复
引用 2 楼 qq381334617 的回复:
自己顶... 现在遇到的问题是:添加的Button按钮添加事件后点击每次都会刷新页面,刷新后动态生成表格不见了..
那你就在pageload里面写上动态加载表格的方法啊。推荐生成html控件用js加事件
liu_lxx 2013-04-03
  • 打赏
  • 举报
回复
引用 3 楼 gxingmin 的回复:
把i记到button的ID里,在 bt_02_Click事件里通过(sender as Button) 的ID来获取id的值
试过了,点击按钮后还是会刷新页面,然后自动生成的Table也没了.. 这是修改后的代码: Panel panel1 = new Panel(); panel1.Visible = true; Button bt_01 = new Button(); bt_01.Command += new CommandEventHandler(this.bt_01_Click); bt_01.ID = i.ToString(); bt_01.Text = "显示"; bt_01.CommandName = "bt_01_Click"; bt_01.CommandArgument = i.ToString(); panel1.Controls.Add(bt_01); protected void bt_01_Click(object sender, EventArgs e) { //获得传递的参数:按钮所在的表格的行数.. Button bt_01 = sender as Button; int i = Convert.ToInt32(bt_01.ID); Response.Write("aaaaaaaaaaa"); ((Panel)ilist.Rows[i].Cells[5].Controls[0]).Visible = false; ((Panel)ilist.Rows[i].Cells[5].Controls[1]).Visible = true; }
tomjun1986 2013-04-03
  • 打赏
  • 举报
回复
button.click+= 不可以么?
gxingmin 2013-04-03
  • 打赏
  • 举报
回复
把i记到button的ID里,在 bt_02_Click事件里通过(sender as Button) 的ID来获取id的值
liu_lxx 2013-04-03
  • 打赏
  • 举报
回复
自己顶... 现在遇到的问题是:添加的Button按钮添加事件后点击每次都会刷新页面,刷新后动态生成表格不见了..
liu_lxx 2013-04-03
  • 打赏
  • 举报
回复
for (int i = 0; i < ds.Tables[0].Rows.Count; i++) {} 这是外部循环,我想通过自动生成的Button将其所在行的i传入事件进行处理.. 嗯嗯,动态生成是没有问题了,目前问题就是Button不听使唤啊..纠结了俩小时了..

62,041

社区成员

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

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

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

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