




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ASP.NET页面中动态增加的控件、添加事件 /-利用计数器实现动态button的累加-/在ASP.NET中动态创建一个控件总是不那么顺利,特别是当对页面的Life Cycle不是那么了然的情况下!这里简单描述一下要求,然后提供一个解决方案,大家看看有没有更好的Idea,如果有的话就是我的大幸了,呵呵!要求:页面上有一个Add按钮,每点击一次该按钮,页面上动态创建一个WebPartZone!提醒:WebPartZone只能在OnInit或之前才能创建,否则报异常!大家都知道,按钮的点击事件是在RaisePostbackEvent时触发的,这意味着点击事件在OnLoad阶段之后才执行,远远落后于
2、 OnInit阶段,而且ViewState在OnLoad时才准备好,OnInit以及之前的阶段根本就不能使用ViewState!如果试图在按钮点击事件里面创建WebPartZone等控件,唯一的后果就是页面出错;而如果在OnInit里面创建控件,由于ViewState没有准备好,那么有些数据比如当前需要创建的个数(存在ViewState里面)就无法获得!目前对这个问题我还没有找到什么好的解决方案,经过实验,勉强得出一个不怎么优雅的方案,就是利用HiddenField保存数据,然后直接使用Request.Form"XXX"在OnInit阶段取得数据;而判断是否点击按钮也是通过
3、Request.Form是否存在对应数据来判断的!废话不多说了,大家看看代码吧!private void Page_Load(object sender, System.EventArgs e)Button Button1 = new Button();Button1.CommandArgument = "b1"Button1.Text = "Btn1"Button1.Command += new CommandEventHandler(this.OnButton);PlaceHolder1.Controls.Add(Button1);Button Bu
4、tton2 = new Button();Button2.CommandArgument = "b2"Button2.Text = "Btn2"Button2.Command += new CommandEventHandler(this.OnButton);PlaceHolder1.Controls.Add(Button2);Control c3 = ParseControl("<asp:Button id='Button3' text='Btn3' commandname='Btn' c
5、ommandargument='b3' runat='server' />"); /将字符串转换成web控件Control c4 = ParseControl("<asp:Button id='Button4' text='Btn4' commandname='Btn' commandargument='b4' runat='server' />");PlaceHolder1.Controls.Add(c3);PlaceHolder1.
6、Controls.Add(c4);Button myBut = (Button)Page.FindControl("Button3");myBut.Command += new CommandEventHandler(this.OnButton);Button myBut2 = (Button)Page.FindControl("Button4");myBut2.Command += new CommandEventHandler(this.OnButton);public void OnButton(Object Sender, CommandEven
7、tArgs e)switch (e.CommandArgument.ToString().ToLower()case "b1":Label1.Text = "Button 1"break;case "b2":Label1.Text = "Button 2"break;case "b3":Label1.Text = "Button 3"break;case "b4":Label1.Text = "Button 4"break;privat
8、e void Page_Load(object sender, System.EventArgs e)Button Button1 = new Button();Button1.CommandArgument = "b1"Button1.Text = "Btn1"Button1.Command += new CommandEventHandler(this.OnButton);PlaceHolder1.Controls.Add(Button1);Button Button2 = new Button();Button2.CommandArgument =
9、 "b2"Button2.Text = "Btn2"Button2.Command += new CommandEventHandler(this.OnButton);PlaceHolder1.Controls.Add(Button2);Control c3 = ParseControl("<asp:Button id='Button3' text='Btn3' commandname='Btn' commandargument='b3' runat='server&
10、#39; />"); /将字符串转换成web控件Control c4 = ParseControl("<asp:Button id='Button4' text='Btn4' commandname='Btn' commandargument='b4' runat='server' />");PlaceHolder1.Controls.Add(c3);PlaceHolder1.Controls.Add(c4);Button myBut = (Button)Page.F
11、indControl("Button3");myBut.Command += new CommandEventHandler(this.OnButton);Button myBut2 = (Button)Page.FindControl("Button4");myBut2.Command += new CommandEventHandler(this.OnButton);public void OnButton(Object Sender, CommandEventArgs e)switch (e.CommandArgument.ToString().T
12、oLower()case "b1":Label1.Text = "Button 1"break;case "b2":Label1.Text = "Button 2"break;case "b3":Label1.Text = "Button 3"break;case "b4":Label1.Text = "Button 4"break;动态添加事件=为控件动态添加事件实现的功能是在网页上的Panel中动态添加一个Button,并为这个Bu
13、tton写一个单击事件。动态添加控件的事件,语句:Control.Command += new CommandEventHandler(this.EventFun);Control.Command += new CommandEventHandler(this.EventFun);具体的代码请看下面:需要特别注意的是:添加控件和给控件加事件时绝对不能放到 if(!IsPostback)里面,那样的话,点击一次后控件会消失,而且事件也不会执行。protected void Page_Load(object sender, EventArgs e)/将输入字符串分析为System.Web.UI.C
14、ontrol对象,b为传进去的值Control c = ParseControl("<asp:Button Text = '按我' ID = 'myButton' commandargument = 'b' runat = 'server' />");/将控件添加大Panel中this.Panel1.Controls.Add(c);/查找页面名为myButton的控件Button Button = (Button)Page.FindControl("myButton");/添加事
15、件On_ButtonButton.Command += new CommandEventHandler(this.On_Button);/CommandEventArgs为command事件提供数据protected void On_Button(Object sender,CommandEventArgs e)Response.Write("<mce:script language = 'javascript' type = 'text/javascript'><!-alert('" + e.CommandArgu
16、ment.ToString() + "');/ -></mce:script>");protected void Page_Load(object sender, EventArgs e)/将输入字符串分析为System.Web.UI.Control对象,b为传进去的值Control c = ParseControl("<asp:Button Text = '按我' ID = 'myButton' commandargument = 'b' runat = 'server
17、9; />");/将控件添加大Panel中this.Panel1.Controls.Add(c);/查找页面名为myButton的控件Button Button = (Button)Page.FindControl("myButton");/添加事件On_ButtonButton.Command += new CommandEventHandler(this.On_Button);/CommandEventArgs为command事件提供数据protected void On_Button(Object sender,CommandEventArgs e)R
18、esponse.Write("<mce:script language = 'javascript' type = 'text/javascript'><!-alert('" + e.CommandArgument.ToString() + "');/ -></mce:script>");-为控件动态添加事件-实现的功能是在网页上的Panel中动态添加一个Button,并为这个Button写一个单击事件。动态添加控件的事件,语句:Control.Command += ne
19、w CommandEventHandler(this.EventFun);Control.Command += new CommandEventHandler(this.EventFun);具体的代码请看下面:需要特别注意的是:添加控件和给控件加事件时绝对不能放到 if(!IsPostback)里面,那样的话,点击一次后控件会消失,而且事件也不会执行。protected void Page_Load(object sender, EventArgs e)/将输入字符串分析为System.Web.UI.Control对象,b为传进去的值Control c = ParseControl("
20、;<asp:Button Text = '按我' ID = 'myButton' commandargument = 'b' runat = 'server' />");/将控件添加大Panel中this.Panel1.Controls.Add(c);/查找页面名为myButton的控件Button Button = (Button)Page.FindControl("myButton");/添加事件On_ButtonButton.Command += new CommandEventHa
21、ndler(this.On_Button);/CommandEventArgs为command事件提供数据protected void On_Button(Object sender,CommandEventArgs e)Response.Write("<mce:script language = 'javascript' type = 'text/javascript'><!-alert('" + e.CommandArgument.ToString() + "');/ -></mce
22、:script>");protected void Page_Load(object sender, EventArgs e)/将输入字符串分析为System.Web.UI.Control对象,b为传进去的值Control c = ParseControl("<asp:Button Text = '按我' ID = 'myButton' commandargument = 'b' runat = 'server' />");/将控件添加大Panel中this.Panel1.Contr
23、ols.Add(c);/查找页面名为myButton的控件Button Button = (Button)Page.FindControl("myButton");/添加事件On_ButtonButton.Command += new CommandEventHandler(this.On_Button);/CommandEventArgs为command事件提供数据protected void On_Button(Object sender,CommandEventArgs e)Response.Write("<mce:script language =
24、'javascript' type = 'text/javascript'><!-alert('" + e.CommandArgument.ToString() + "');/ -></mce:script>");- 中服务器端控件动态添加事件和删除事-PlaceHolder :控件容器,本身不显示,主要用来放服务器控件的,只显示其子元素(他里面的控件)服务器控件动态添加和删除<一>PlaceHolder 中动态添加服务器端控件添加控件的一般方法:声明一个新控件 如 labe
25、l lb =new label()设置控件属性 如:lb.text="text"添加控件到 PlaceHolder 中 如: PlaceHolder1.controls.add(lb)可以用 ViewStateAddedControl=null 判断是不是第一次执行动态添加控件,如果需要数据绑定,要先添加控件,然后再数据绑定,提交后(postback) 就不需要重新绑定了new 一下就可以了,如:if (ViewStateAddedControl != null) & (bool)ViewStateAddedControl)/第二次就不要数据绑定了ph1.Contr
26、ols.Clear();/清除ph1中的控件DropDownList dpl = new DropDownList();dpl.ID = "controlid"dpl.AutoPostBack = true;ph1.Controls.Add(dpl);elseph1.Controls.Clear();DropDownList dpl = new DropDownList();dpl.ID = "controlid"dpl.AutoPostBack = true;ph1.Controls.Add(dpl);/链接数据库,设置数据源等 略dpl.DataBi
27、nd();ViewStateAddedControl = true;if (ViewStateAddedControl != null) & (bool)ViewStateAddedControl)/第二次就不要数据绑定了ph1.Controls.Clear();/清除ph1中的控件DropDownList dpl = new DropDownList();dpl.ID = "controlid"dpl.AutoPostBack = true;ph1.Controls.Add(dpl);elseph1.Controls.Clear();DropDownList dp
28、l = new DropDownList();dpl.ID = "controlid"dpl.AutoPostBack = true;ph1.Controls.Add(dpl);/链接数据库,设置数据源等 略dpl.DataBind();ViewStateAddedControl = true;<二>panel中动态添加服务器端控件在一个panel 中添加datagrid 并且绑定数据Panel panel1 = new Panel();panel1.Style"top" = "200px"/设置属性this.Contro
29、ls.Add(panel1);DataGrid dg1 = new DataGrid();/定义datagridBoundColumn s1 = new BoundColumn();/定义一列s1.DataField = "first"/绑定列的数据源s1.HeaderText = "mzi"/此列标题等属性设置dg1.Columns.Add(s1);/加入此列dg1.BackColor = "#00000"dg1.CellPadding=3;/设置 dg1的属性等panel1.Controls.Add(dg1);Panel pane
30、l1 = new Panel();panel1.Style"top" = "200px"/设置属性this.Controls.Add(panel1);DataGrid dg1 = new DataGrid();/定义datagridBoundColumn s1 = new BoundColumn();/定义一列s1.DataField = "first"/绑定列的数据源s1.HeaderText = "mzi"/此列标题等属性设置dg1.Columns.Add(s1);/加入此列dg1.BackColor = &q
31、uot;#00000"dg1.CellPadding=3;/设置 dg1的属性等panel1.Controls.Add(dg1);<三> 给动态添加的控件添加事件:如:给button 添加事件/添加按钮1Button bt1 = new Button();bt1.CommandArgument = "bt1"/设置命令参数bt1.Text = "daji"bt1.Command += new CommandEventHandler(this.onbutton);/预定事件ph1.Controls.Add(bt1);/添加按钮2,又一
32、种方法Control cs = ParseControl("<asp:Button ID='Button2' runat='server' Text=Button' commandname='btn' CommandArgument = 'bt2'/>");/把字符串转化为控件ph1.Controls.Add(cs);Button bt2 = (Button)Page.FindControl("button2");bt2.Command += new CommandEve
33、ntHandler(this.onbutton);/给bt2添加事件public void onbutton(object sender, CommandEventArgs e)lab1.text = "label1"/添加按钮1Button bt1 = new Button();bt1.CommandArgument = "bt1"/设置命令参数bt1.Text = "daji"bt1.Command += new CommandEventHandler(this.onbutton);/预定事件ph1.Controls.Add(bt
34、1);/添加按钮2,又一种方法Control cs = ParseControl("<asp:Button ID='Button2' runat='server' Text=Button' commandname='btn' CommandArgument = 'bt2'/>");/把字符串转化为控件ph1.Controls.Add(cs);Button bt2 = (Button)Page.FindControl("button2");bt2.Command += ne
35、w CommandEventHandler(this.onbutton);/给bt2添加事件public void onbutton(object sender, CommandEventArgs e)lab1.text = "label1"这样二个按钮都对应一个函数,执行同一个事件如果想让他们执行不同事件,可以这样写:public void onbutton(object sender, CommandEventArgs e)switch (e.CommandArgument.ToString().ToLower() 获取命令参数,根据参数的不同,执行不同命令case &
36、quot;bt1":lab1.text = "label1" break;case "bt2":lab1.text = "label2" break;public void onbutton(object sender, CommandEventArgs e)switch (e.CommandArgument.ToString().ToLower() 获取命令参数,根据参数的不同,执行不同命令case "bt1":lab1.text = "label1" break;case &quo
37、t;bt2":lab1.text = "label2" break;<四>:在table中添加行和服务器端控件在table中添加一行二列 table要转化服务器端控件代码如下:HtmlTableRow tr1 = new HtmlTableRow();/定义行HtmlTableCell td1 = new HtmlTableCell();/定义列Label lb1 = new Label();/ 定义 lb1 为Label控件lb1.Text = txtm;/lb1td1.Controls.Add(lb1);/列中添加lblHtmlTableCell
38、td2 = new HtmlTableCell();/定义列TextBox txt1 = new TextBox();/textboxtxt1.Text = namevaluem;/texttxt1.ID = "t" + m;/idtd2.Controls.Add(txt1);列中添加txt1tr1.Cells.Add(td1);/行中添加列td1tr1.Cells.Add(td2);/行中添加列td1TABLE1.Rows.Add(tr1);/表中添加行HtmlTableRow tr1 = new HtmlTableRow();/定义行HtmlTableCell td1
39、= new HtmlTableCell();/定义列Label lb1 = new Label();/ 定义 lb1 为Label控件lb1.Text = txtm;/lb1td1.Controls.Add(lb1);/列中添加lblHtmlTableCell td2 = new HtmlTableCell();/定义列TextBox txt1 = new TextBox();/textboxtxt1.Text = namevaluem;/texttxt1.ID = "t" + m;/idtd2.Controls.Add(txt1);列中添加txt1tr1.Cells.Ad
40、d(td1);/行中添加列td1tr1.Cells.Add(td2);/行中添加列td1TABLE1.Rows.Add(tr1);/表中添加行取得textbox中数据方法:(TextBox)(TABLE1.Rowsm.FindControl("t" + m).Text 第m行 id 为"t"+m的控件的值添加html 控件,可以用 response.write("")为服务器端控件添加客户端事件方法;如:buttton.Attributes"onclick" = "javascript:alert('shijain')"关于ASP.NET页面动态添加控件的总结<% Page Language="C#" %><% Import Namespace="System.Data" %><Script Language="C#" Runat="Server"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025黑龙江哈尔滨“丁香人才周”(春季)事业单位引才招聘模拟试卷及答案详解(全优)
- 2025年国家知识产权局知识产权检索咨询中心社会招聘(16人)考前自测高频考点模拟试题及答案详解参考
- 2025安徽芜湖市中西医结合医院(湾沚区总医院)招聘第三方救护车驾驶员(第二批)1人考前自测高频考点模拟试题完整参考答案详解
- 2025江西省财通供应链金融集团有限公司劳务派遣制人员招聘8人考前自测高频考点模拟试题及答案详解(有一套)
- 2025广东广州翰城房地产开发有限公司招聘工作人员、进入人员模拟试卷附答案详解
- 2025河南中医药大学招聘辅导员、行政岗等13名考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025北京市房山区燕山教育委员会所属事业单位第一批招聘教师30人考前自测高频考点模拟试题及答案详解(名师系列)
- 2025南平延平峡阳镇卫生院招聘驾驶员模拟试卷及完整答案详解
- 2025河北保定市雄安新区雄县事业单位招聘89人模拟试卷(含答案详解)
- 2025广东珠海市第二批拟引进业务骨干人员模拟试卷及答案详解参考
- 第49部分:碳酸根、重碳酸根和氢氧根离子的测定 滴定法(报批稿)
- T/CAAM 0004-2023针刺临床试验中假针刺对照设置与报告指南
- 配网全过程管理
- 立陶宛语儿童文学的语言特点论文
- 民宿的内涵专题课件
- 高职高考数学复习第五章数列5-1数列课件
- 高一必修一英语单词默写表
- GB/T 40816.2-2024工业炉及相关工艺设备能量平衡测试及能效计算方法第2部分:钢加热炉
- 增值税发票清单模板
- 人教版六年级数学上册第一单元测试卷
- 2024年注册安全工程师生产技术押密试题及答案
评论
0/150
提交评论