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

提交評論