




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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年執業藥師資格證之《西藥學專業一》預測試題附答案詳解ab卷
- 江蘇城市職業學院《新藥設計》2023-2024學年第二學期期末試卷
- 首都經濟貿易大學《廣播電視藝術概論》2023-2024學年第二學期期末試卷
- 廣州體育職業技術學院《西方禮儀文化》2023-2024學年第二學期期末試卷
- 云南城市建設職業學院《動畫綜合創作》2023-2024學年第二學期期末試卷
- 漳州職業技術學院《工程項目管理》2023-2024學年第二學期期末試卷
- 鄭州理工職業學院《工程計量》2023-2024學年第二學期期末試卷
- 快速找到最佳候選人人才招聘流程
- 廣東省深圳市寶安區2023-2024學年二年級下冊期末測試數學試卷(含答案)
- 北京市順義區2023-2024學年五年級下學期數學期末試卷(含答案)
- 2025年高考真題-英語(全國一卷) 含答案
- 2025公基題庫(附答案解析)
- 2024年佛山市順德區龍江社區衛生服務中心招聘真題
- 2025年寧夏銀川靈武市選聘市屬國有企業管理人員招聘筆試沖刺題(帶答案解析)
- 三大監測培訓試題及答案
- 兩辦意見宣貫考試題及答案
- 2025年汽車駕照考試科目一考試題庫及參考答案
- 2025年防范和打擊非法金融活動競賽題庫300題(含答案)
- 北京2025年04月中國工程院戰略咨詢中心招考10名勞動合同制人員筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
評論
0/150
提交評論