当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET 页面中动态增加的控件、添加事件第1/2页

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

2017年12月12日  | 移动技术网IT编程  | 我要评论
要求:页面上有一个add按钮,每点击一次该按钮,页面上动态创建一个webpartzone!   提醒:webpartzone只能在oninit或之前才能创建,否则报异常!

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')";
2

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网