`
胡火云
  • 浏览: 45324 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ASP.NET页面中动态增加的控件、添加事件

 
阅读更多

/--------------------------利用计数器实现动态button的累加---------------------------------/

在ASP.NET中动态创建一个控件总是不那么顺利,特别是当对页面的Life Cycle不是那么了然的情况下!这里简单描述一下要求,然后提供一个解决方案,大家看看有没有更好的Idea,如果有的话就是我的大幸了,呵呵!

  要求:页面上有一个Add按钮,每点击一次该按钮,页面上动态创建一个WebPartZone!

  提醒:WebPartZone只能在OnInit或之前才能创建,否则报异常!

  大家都知道,按钮的点击事件是在RaisePostbackEvent时触发的,这意味着点击事件在OnLoad阶段之后才执行,远远落后于 OnInit阶段,而且ViewState在OnLoad时才准备好,OnInit以及之前的阶段根本就不能使用ViewState!如果试图在按钮点击 事件里面创建WebPartZone等控件,唯一的后果就是页面出错;而如果在OnInit里面创建控件,由于ViewState没有准备好,那么有些数 据比如当前需要创建的个数(存在ViewState里面)就无法获得!

  目前对这个问题我还没有找到什么好的解决方案,经过实验,勉强得出一个不怎么优雅的方案,就是利用HiddenField保存数据,然后直接使 用Request.Form["XXX"]在OnInit阶段取得数据;而判断是否点击按钮也是通过Request.Form是否存在对应数据来判断的! 废话不多说了,大家看看代码吧!

  1. private void Page_Load(object sender, System.EventArgs e)
  2. {
  3. Button Button1 = new Button();
  4. Button1.CommandArgument = "b1";
  5. Button1.Text = "Btn1";
  6. Button1.Command += new CommandEventHandler(this.OnButton);
  7. PlaceHolder1.Controls.Add(Button1);
  8. Button Button2 = new Button();
  9. Button2.CommandArgument = "b2";
  10. Button2.Text = "Btn2";
  11. Button2.Command += new CommandEventHandler(this.OnButton);
  12. PlaceHolder1.Controls.Add(Button2);
  13. Control c3 = ParseControl("<asp:Button id='Button3' text='Btn3' commandname='Btn' commandargument='b3' runat='server' />"); //将字符串转换成web控件
  14. Control c4 = ParseControl("<asp:Button id='Button4' text='Btn4' commandname='Btn' commandargument='b4' runat='server' />");
  15. PlaceHolder1.Controls.Add(c3);
  16. PlaceHolder1.Controls.Add(c4);
  17. Button myBut = (Button)Page.FindControl("Button3");
  18. myBut.Command += new CommandEventHandler(this.OnButton);
  19. Button myBut2 = (Button)Page.FindControl("Button4");
  20. myBut2.Command += new CommandEventHandler(this.OnButton);
  21. }
  22. public void OnButton(Object Sender, CommandEventArgs e)
  23. {
  24. switch (e.CommandArgument.ToString().ToLower())
  25. {
  26. case "b1":
  27. Label1.Text = "Button 1";
  28. break;
  29. case "b2":
  30. Label1.Text = "Button 2";
  31. break;
  32. case "b3":
  33. Label1.Text = "Button 3";
  34. break;
  35. case "b4":
  36. Label1.Text = "Button 4";
  37. break;
  38. };
  39. }

==========================动态添加事件===================================

asp.net为控件动态添加事件

实现的功能是在网页上的Panel中动态添加一个Button,并为这个Button写一个单击事件。

动态添加控件的事件,语句:

  1. Control.Command += new CommandEventHandler(this.EventFun);

具体的代码请看下面:

需要特别注意的是:

添加控件和给控件加事件时绝对不能放到 if(!IsPostback){}里面,那样的话,点击一次后控件会消失,而且事件也不

会执行。

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. //将输入字符串分析为System.Web.UI.Control对象,b为传进去的值
  4. Control c = ParseControl("<asp:Button Text =& nbsp;'按我' ID = 'myButton' commandargument =& nbsp;'b' runat = 'server' />");
  5. //将控件添加大Panel中
  6. this.Panel1.Controls.Add(c);
  7. //查找页面名为myButton的控件
  8. Button Button = (Button)Page.FindControl("myButton");
  9. //添加事件On_Button
  10. Button.Command += new CommandEventHandler(this.On_Button);
  11. }
  12. //CommandEventArgs为command事件提供数据
  13. protected void On_Button(Object sender,CommandEventArgs e)
  14. {
  15. Response.Write("<mce:script language = 'javascript' type = 'text/javascript'><!--
  16. alert('" + e.CommandArgument.ToString() + "');
  17. // --></mce:script>");
  18. }

-----------------------------------------asp.net为控件动态添加事件----------------------------------------------------

实现的功能是在网页上的Panel中动态添加一个Button,并为这个Button写一个单击事件。

动态添加控件的事件,语句:

  1. Control.Command += new CommandEventHandler(this.EventFun);

具体的代码请看下面:

需要特别注意的是:

添加控件和给控件加事件时绝对不能放到 if(!IsPostback){}里面,那样的话,点击一次后控件会消失,而且事件也不

会执行。

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. //将输入字符串分析为System.Web.UI.Control对象,b为传进去的值
  4. Control c = ParseControl("<asp:Button Text =& nbsp;'按我' ID = 'myButton' commandargument =& nbsp;'b' runat = 'server' />");
  5. //将控件添加大Panel中
  6. this.Panel1.Controls.Add(c);
  7. //查找页面名为myButton的控件
  8. Button Button = (Button)Page.FindControl("myButton");
  9. //添加事件On_Button
  10. Button.Command += new CommandEventHandler(this.On_Button);
  11. }
  12. //CommandEventArgs为command事件提供数据
  13. protected void On_Button(Object sender,CommandEventArgs e)
  14. {
  15. Response.Write("<mce:script language = 'javascript' type = 'text/javascript'><!--
  16. alert('" + e.CommandArgument.ToString() + "');
  17. // --></mce:script>");
  18. }

-----------------------------asp.net 中服务器端控件动态添加事件和删除事------------------------------------------

PlaceHolder :控件容器,本身不显示,主要用来放服务器控件的,只显示其子元素(他里面的控件)

服务器控件动态添加和删除

<一>PlaceHolder 中动态添加服务器端控件

添加控件的一般方法:

声明一个新控件 如 label lb =new label()

设置控件属性 如:lb.text="text"

添加控件到 PlaceHolder 中 如: PlaceHolder1.controls.add(lb)

可以用 ViewState[AddedControl]=null 判断是不是第一次执行

动态添加控件,如果需要数据绑定,要先添加控件,然后再数据绑定,提交后(postback) 就不需要重新绑定了

new 一下就可以了,如:

  1. if ((ViewState[AddedControl] != null) & ((bool)ViewState[AddedControl]))//第二次就不要数据绑定了
  2. {
  3. ph1.Controls.Clear();//清除ph1中的控件
  4. DropDownList dpl = new DropDownList();
  5. dpl.ID = "controlid";
  6. dpl.AutoPostBack = true;
  7. ph1.Controls.Add(dpl);
  8. }
  9. else
  10. {
  11. ph1.Controls.Clear();
  12. DropDownList dpl = new DropDownList();
  13. dpl.ID = "controlid";
  14. dpl.AutoPostBack = true;
  15. ph1.Controls.Add(dpl);
  16. //链接数据库,设置数据源等 略
  17. dpl.DataBind();
  18. ViewState[AddedControl] = true;
  19. }

<二>panel中动态添加服务器端控件

在一个panel 中添加datagrid 并且绑定数据

  1. Panel panel1 = new Panel();
  2. panel1.Style["top"] = "200px";//设置属性
  3. this.Controls.Add(panel1);
  4. DataGrid dg1 = new DataGrid();//定义datagrid
  5. BoundColumn s1 = new BoundColumn();//定义一列
  6. s1.DataField = "first";//绑定列的数据源
  7. s1.HeaderText = "mzi";//此列标题等属性设置
  8. dg1.Columns.Add(s1);//加入此列
  9. dg1.BackColor = "#00000";
  10. dg1.CellPadding=3;
  11. //设置 dg1的属性等
  12. panel1.Controls.Add(dg1);

<三> 给动态添加的控件添加事件:

如:给button 添加事件

  1. //添加按钮1
  2. Button bt1 = new Button();
  3. bt1.CommandArgument = "bt1";//设置命令参数
  4. bt1.Text = "daji";
  5. bt1.Command += new CommandEventHandler(this.onbutton);//预定事件
  6. ph1.Controls.Add(bt1);
  7. //添加按钮2,又一种方法
  8. Control cs = ParseControl("<asp:Button ID='Button2' runat='server' Text=Button' commandname='btn' CommandArgument = 'bt2'/>");//把字符串转化为控件
  9. ph1.Controls.Add(cs);
  10. Button bt2 = (Button)Page.FindControl("button2");
  11. bt2.Command += new CommandEventHandler(this.onbutton);//给bt2添加事件
  12. }
  13. public void onbutton(object sender, CommandEventArgs e)
  14. {
  15. lab1.text = "label1";
  16. }

这样二个按钮都对应一个函数,执行同一个事件

如果想让他们执行不同事件,

可以这样写:

  1. public void onbutton(object sender, CommandEventArgs e)
  2. {
  3. switch (e.CommandArgument.ToString().ToLower()) 获取命令参数,根据参数的不同,执行不同命令
  4. {
  5. case "bt1":lab1.text = "label1"; break;
  6. case "bt2":lab1.text = "label2"; break;
  7. }
  8. }

<四>:在table中添加行和服务器端控件

在table中添加一行二列 table要转化服务器端控件

代码如下:

  1. HtmlTableRow tr1 = new HtmlTableRow();//定义行
  2. HtmlTableCell td1 = new HtmlTableCell();//定义列
  3. Label lb1 = new Label();// 定义 lb1 为Label控件
  4. lb1.Text = txt[m];//lb1
  5. td1.Controls.Add(lb1);//列中添加lbl
  6. HtmlTableCell td2 = new HtmlTableCell();//定义列
  7. TextBox txt1 = new TextBox();//textbox
  8. txt1.Text = namevalue[m];//text
  9. txt1.ID = "t" + m;//id
  10. td2.Controls.Add(txt1);列中添加txt1
  11. tr1.Cells.Add(td1);//行中添加列td1
  12. tr1.Cells.Add(td2);//行中添加列td1
  13. TABLE1.Rows.Add(tr1);//表中添加行

取得textbox中数据方法:

((TextBox)(TABLE1.Rows[m].FindControl("t" + m))).Text 第m行 id 为"t"+m的控件的值

添加html 控件,可以用 response.write("")

为服务器端控件添加客户端事件方法;

如:buttton.Attributes["onclick"] = "javascript:alert('shijain')";

分享到:
评论

相关推荐

    asp.net实现动态添加控件并添加事件实例

    在这个实例中,我们将深入探讨如何在 ASP.NET 中动态地添加控件以及如何为这些控件添加事件处理程序。 在 ASP.NET 中,动态创建控件是指在页面生命周期的某个阶段(通常是 OnInit 或 OnLoad 事件)通过代码而非在...

    asp.net 动态添加控件

    在回发过程中,由于ASP.NET的页面生命周期,这些动态添加的控件会丢失,因此需要在每次回发时重新创建。客户端则主要关注如何显示这些动态生成的控件以及处理与它们相关的事件。 二、动态添加控件的步骤 1. 创建...

    asp.net 动态添加删除控件

    首先,我们需要了解ASP.NET页面生命周期。在ASP.NET中,服务器控件在每次请求时都会被创建、初始化、加载、回发处理(如果有的话)、显示和卸载。动态添加控件的操作必须在页面的PreInit阶段执行,因为这是最早的...

    ASP.NET用户控件和自定义控件

    4. 在其他ASP.NET页面中,可以通过像使用普通服务器控件一样,使用指令注册用户控件,并在页面上添加控件实例。 用户控件的优势在于它们可以重用和封装代码,提高开发效率。开发者可以将常见的界面元素,如导航栏、...

    ASP.NET中dropdownlist和GridView控件的用法

    - 在ASP.NET页面上,通过拖放或代码方式添加Dropdownlist控件。 - 通过`Items`属性添加静态选项,或者通过`DataSource`和`DataTextField`、`DataValueField`属性绑定动态数据。 2. 数据绑定: - 使用`...

    【ASP.NET编程知识】ASP.NET动态添加用户控件的方法.docx

    ASP.NET动态添加用户控件的方法 在ASP.NET编程中,动态添加用户控件是...ASP.NET用户控件技术是ASP.NET编程中的一个重要组件,通过动态添加用户控件,我们可以使得我们的页面更加灵活和灵活,从而提高开发效率和质量。

    asp.net控件笔记 asp.net控件笔记

    ASP.NET控件是微软.NET Framework框架中用于构建Web应用程序的核心元素。这些控件提供了一种简单的方法来构建交互式、动态的网页。本笔记将深入探讨ASP.NET控件的各个方面,帮助开发者更好地理解和使用这些工具。 ...

    在ASP.NET中使用单选按钮控件.rar

    首先,让我们了解如何在ASP.NET页面上添加单选按钮。在设计视图中,可以通过工具箱找到“RadioButton”控件并将其拖放到网页上。或者,也可以在源代码视图中手动添加,如下所示: ```html &lt;asp:RadioButton ID=...

    ASP.NET页面验证码控件,方便快捷使用(附使用说明)

    这样,我们就可以在ASP.NET页面中像使用内置控件一样使用`AutoAuthCode`控件了。 在实际应用中,我们可以这样在ASP.NET的`.aspx`页面中使用这个验证码控件: ```asp ``` 运行时,这个控件会生成一个随机的图像,...

    ASP.NET 页面中动态增加的控件、添加事件第1/2页

    在ASP.NET中,动态添加控件以及为其绑定事件是一个常见的需求,特别是在构建可自定义或者交互性强的Web应用程序时。然而,由于ASP.NET页面生命周期的复杂性,这并不总是一件简单的事情。页面生命周期包括多个阶段,...

    动态添加控件ASP.NET

    在ASP.NET中,动态添加控件通常是在页面加载事件或用户触发的其他事件中完成的。动态添加的控件可以是任何类型的服务器控件,如`TextBox`、`Button`、`ListBox`、`DropDownList`等。 #### 三、示例代码解析 以下是...

    ASP.NET初级_GridView控件和FormView控件

    在提供的压缩包"Koko_ASP.NET初级_GridView控件和FormView控件"中,你可能找到一个示例项目,展示了如何在实际开发中使用这两种控件。通过研究这个例子,你可以学习如何设置控件属性,编写事件处理程序,以及如何在...

    动态创建控件 asp.net

    这个解决方案可能包括一个或多个ASP.NET页面,展示了如何动态创建控件、填充表单元素以及处理用户输入。 通过理解和掌握动态创建控件的技术,开发者能够提高应用程序的灵活性和可扩展性,实现更加复杂的用户界面和...

    Asp.Net服务器端控件

    在Asp.Net中,服务器端控件是核心的开发元素,它们在服务器上执行,并在每次页面生命周期中处理事件。 1. **控件类型** Asp.Net服务器端控件分为多种类型,包括HTML控件、Web控件和自定义控件。HTML控件类似于传统...

    ASP.NET 页面控件遍历

    ASP.NET 页面控件遍历是开发ASP.NET Web应用程序时的一项重要...理解并熟练掌握ASP.NET页面控件遍历,对于高效地管理和操作Web应用的用户界面至关重要。在实际开发中,应灵活运用各种遍历策略,以适应不同场景的需求。

    asp.net客户端动态生成控件

    在ASP.NET开发中,动态生成控件是一种常见的技术,它允许开发者在运行时根据需要创建、修改或删除页面上的用户界面元素。这种技术对于构建高度交互性和灵活性的应用程序尤其有用,比如在线表单、购物车或者任何需要...

    在ASP.NET中使用DataList控件.rar

    1. 添加DataList控件:在ASP.NET页面上拖放DataList控件,设置ID属性。 2. 数据源配置:可以使用Visual Studio的“数据源”窗口或代码中手动配置数据源。 3. 定义模板:在设计视图中编辑模板,将数据字段绑定到控件...

    asp.net第三方控件汇集集

    在ASP.NET中,控件是构建用户界面的关键元素,它们提供了丰富的功能和灵活性,使得开发者能够快速构建复杂的网页应用。第三方控件是除了.NET Framework自带控件之外,由独立软件开发商提供的扩展控件,它们通常具有...

    ASP.NET mvc tree 树 类似 TreeView 控件

    ASP.NET MVC中的树形结构(Tree)控件与ASP.NET中的TreeView控件相似,用于在Web应用程序中展示层级数据,例如目录结构、组织结构或分类系统。这些控件通过节点和子节点的关系来呈现数据,使得用户可以方便地浏览和...

    ASP.NET\ASP.NET服务端控件,HTML控件,HTML服务端控件 的区别

    在Web开发领域,特别是使用ASP.NET框架时,理解不同类型的控件及其功能对于构建高效、响应式的Web应用程序至关重要。本文将深入探讨ASP.NET服务端控件、HTML控件以及HTML服务端控件之间的区别,帮助开发者更好地选择...

Global site tag (gtag.js) - Google Analytics