ASPNET页面中动态增加的控件、添加事件_第1页
ASPNET页面中动态增加的控件、添加事件_第2页
ASPNET页面中动态增加的控件、添加事件_第3页
ASPNET页面中动态增加的控件、添加事件_第4页
ASPNET页面中动态增加的控件、添加事件_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论