ASP.NET 页面中动态增加的控件、添加事件第2/2页
更新时间:2009年07月16日 01:10:47 作者:
在ASP.NET中动态创建一个控件总是不那么顺利,特别是当对页面的Life Cycle不是那么了然的情况下!这里简单描述一下要求,然后提供一个解决方案,大家看看有没有更好的Idea,如果有的话就是我的大幸了,呵呵!
asp.net 中服务器端控件动态添加事件和删除事------------------------------------------
PlaceHolder :控件容器,本身不显示,主要用来放服务器控件的,只显示其子元素(他里面的控件)
服务器控件动态添加和删除
<一>PlaceHolder 中动态添加服务器端控件
添加控件的一般方法:
声明一个新控件 如 label lb =new label()
设置控件属性 如:lb.text="text"
添加控件到 PlaceHolder 中 如: PlaceHolder1.controls.add(lb)
可以用 ViewState[AddedControl]=null 判断是不是第一次执行
动态添加控件,如果需要数据绑定,要先添加控件,然后再数据绑定,提交后(postback) 就不需要重新绑定了
new 一下就可以了,如:
复制代码 代码如下:
if ((ViewState[AddedControl] != null) & ((bool)ViewState[AddedControl]))//第二次就不要数据绑定了
{
ph1.Controls.Clear();//清除ph1中的控件
DropDownList dpl = new DropDownList();
dpl.ID = "controlid";
dpl.AutoPostBack = true;
ph1.Controls.Add(dpl);
}
else
{
ph1.Controls.Clear();
DropDownList dpl = new DropDownList();
dpl.ID = "controlid";
dpl.AutoPostBack = true;
ph1.Controls.Add(dpl);
//链接数据库,设置数据源等 略
dpl.DataBind();
ViewState[AddedControl] = true;
}
<二>panel中动态添加服务器端控件
在一个panel 中添加datagrid 并且绑定数据
复制代码 代码如下:
Panel panel1 = new Panel();
panel1.Style["top"] = "200px";//设置属性
this.Controls.Add(panel1);
DataGrid dg1 = new DataGrid();//定义datagrid
BoundColumn s1 = new BoundColumn();//定义一列
s1.DataField = "first";//绑定列的数据源
s1.HeaderText = "mzi";//此列标题等属性设置
dg1.Columns.Add(s1);//加入此列
dg1.BackColor = "#00000";
dg1.CellPadding=3;
//设置 dg1的属性等
panel1.Controls.Add(dg1);
<三> 给动态添加的控件添加事件:
如:给button 添加事件
复制代码 代码如下:
//添加按钮1
Button bt1 = new Button();
bt1.CommandArgument = "bt1";//设置命令参数
bt1.Text = "daji";
bt1.Command += new CommandEventHandler(this.onbutton);//预定事件
ph1.Controls.Add(bt1);
//添加按钮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 += new 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 "bt1":lab1.text = "label1"; break;
case "bt2":lab1.text = "label2"; break;
}
}
<四>:在table中添加行和服务器端控件
在table中添加一行二列 table要转化服务器端控件
代码如下:
复制代码 代码如下:
HtmlTableRow tr1 = new HtmlTableRow();//定义行
HtmlTableCell td1 = new HtmlTableCell();//定义列
Label lb1 = new Label();// 定义 lb1 为Label控件
lb1.Text = txt[m];//lb1
td1.Controls.Add(lb1);//列中添加lbl
HtmlTableCell td2 = new HtmlTableCell();//定义列
TextBox txt1 = new TextBox();//textbox
txt1.Text = namevalue[m];//text
txt1.ID = "t" + m;//id
td2.Controls.Add(txt1);列中添加txt1
tr1.Cells.Add(td1);//行中添加列td1
tr1.Cells.Add(td2);//行中添加列td1
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 Core使用EF SQLite对数据库增删改查
这篇文章介绍了ASP.NET Core使用EF SQLite对数据库增删改查的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-01-01.net core利用PdfSharpCore操作PDF实例教程
操作pdf是我们日常开发中经常遇到的功能,下面这篇文章主要给大家介绍了关于.net core利用PdfSharpCore操作PDF实例的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下2022-12-12Asp.net 2.0 无刷新图片上传 显示缩略图 具体实现
简单三步实现图片无刷新上传:注意是上传,至于上传时的验证,比如图片的尺寸,大小,格式。自行解决。如果我搞定了,也会贴上来的。2013-06-06
最新评论