读书人

动态添加控件的有关问题(跪求实现效果

发布时间: 2011-12-24 23:03:24 作者: rapoo

动态添加控件的问题(跪求实现效果的方法)
页面添加一个Panel
<form id= "form1 " runat= "server ">
<div>
<asp:Panel ID= "Panel1 " runat= "server " Height= "50px " Width= "125px ">
</asp:Panel>
</div>
</form>
然后后台实现动态添加LinkButton,并调用MyClick()
protected void Page_Load(object sender, EventArgs e)
{
LinkButton[] lb = new LinkButton[4];
for (int i = 0; i < 4; i++)
{
lb[i] = new LinkButton();
lb[i].ID = "lb "+ i.ToString();
lb[i].Text = "这是动态添加的LinkButton " + i.ToString();
lb[i].Click += new EventHandler(MyClick);//委托
Panel1.Controls.Add(lb[i]);
}
}
//这里再在页面添加一个Panel,在Panel上再动态添加LinkButton,调用MyClick2()
private void MyClick(object sender, EventArgs e)
{
//LinkButton lbb = (LinkButton)sender;


Panel panel = new Panel();
form1.Controls.Add(panel);
LinkButton[] lbClick = new LinkButton[4];

for (int i = 0; i < 4; i++)
{
lbClick[i] = new LinkButton();
lbClick[i].ID = "lbClick " + i.ToString();
lbClick[i].Text = "这是动态添加的LinkButton产生的Panel上面再动态添加的LinkButton " + i.ToString();
lbClick[i].Click += new EventHandler(MyClick2);//委托
panel.Controls.Add(lbClick[i]);
}
}
private void MyClick2(object sender, EventArgs e)
{
Response.Write( "这个事件触发不了,请达人赐教该怎么实现这个效果,能够触发这个事件,万分感激! ");
}
可能用这样的方法实现不了这样的效果,但是其他方法我不会,还希望高手赐教。。多谢拉。。
就是动态添加的控件触发事件再动态添加控件,然后再触发事件,要能传参数。。
跪求方法,在线等。。。。


[解决办法]
动态的控件一引发事件,就会去趟服务器,那你刚才动态创建的控件就都没了

除非用视图状态等方式记载这些控件的状态信息,但这样也很麻烦
[解决办法]
<%@ Page Language= "C# " AutoEventWireup= "true " CodeFile= "Default.aspx.cs " Inherits= "_Default " %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN " "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd ">


<html xmlns= "http://www.w3.org/1999/xhtml ">
<head runat= "server ">
<title> Untitled Page </title>
</head>
<body>
<form id= "form1 " runat= "server ">
<asp:Panel ID= "Panel1 " runat= "server ">
</asp:Panel>
<br />
<asp:Button ID= "Button1 " runat= "server " OnClick= "Button1_Click " Text= "测试其它控件状态 " />
</form>
</body>
</html>


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.Generic;

public partial class _Default : System.Web.UI.Page
{
private List <string> ClickedPanelsID
{
get
{
if (ViewState[ "clicked "] == null)
ViewState[ "clicked "] = new List <string> ();
return (List <string> )ViewState[ "clicked "];
}
}

protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < 4; i++)
{
if (i > 0)
Panel1.Controls.Add(new LiteralControl( " <br /> "));
LinkButton lb = new LinkButton();
lb.ID = "lb " + i.ToString();
lb.Text = "这是动态添加的LinkButton " + i.ToString();
lb.Click += new EventHandler(MyClick);//委托
Panel1.Controls.Add(lb);
}
foreach (string s in ClickedPanelsID)
AddOnePanel(s);
}

private void MyClick(object sender, EventArgs e)
{
AddOnePanel(null);
}

private void AddOnePanel(string ID)
{
Panel panel = new Panel();
if (ID == null)
{
panel.ID = "panel_ " + panel.GetHashCode().ToString();
ClickedPanelsID.Add(panel.ID);
}
else
{
panel.ID = ID;
}
form1.Controls.Add(panel);
panel.Controls.Add(new LiteralControl( " <hr /> "));
for (int i = 0; i < 4; i++)
{
if (i > 0)
panel.Controls.Add(new LiteralControl( " <br /> "));
LinkButton lbClick = new LinkButton();
lbClick.ID = "lbClick " + i.ToString() + "_in_ " + panel.ID;
lbClick.Text = "这是动态添加的LinkButton产生的Panel上面再动态添加的LinkButton " + i.ToString();
lbClick.Click += new EventHandler(MyClick2);//委托
panel.Controls.Add(lbClick);
}
}

private void MyClick2(object sender, EventArgs e)
{
string scp = "alert( '事件触发 '); ";
this.ClientScript.RegisterStartupScript(this.GetType(), scp.GetHashCode().ToString(), scp, true);
}

protected void Button1_Click(object sender, EventArgs e)
{
}
}


[解决办法]
就如楼上,一般用ViewState保存动态创建的控件的信息
[解决办法]
List <string> 是2005用的 应该是string集合的意思

读书人网 >asp.net

热点推荐