页面添加一个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("这个事件触发不了,请达人赐教该怎么实现这个效果,能够触发这个事件,万分感激!");  
       }
可能用这样的方法实现不了这样的效果,但是其他方法我不会,还希望高手赐教。。多谢拉。。
就是动态添加的控件触发事件再动态添加控件,然后再触发事件,要能传参数。。
跪求方法,在线等。

解决方案 »

  1.   

    <%@ 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)
        {
        }
    }
      

  2.   

    就如楼上,一般用ViewState保存动态创建的控件的信息
      

  3.   

    我用session实现我的效果了,前两天忙,今天来看这个帖子发现这样好象也可以,但是
    private List<string> ClickedPanelsID我不懂,是什么索引器么?list又是什么,请教
      

  4.   

    List<string> 是2005用的 应该是string集合的意思
      

  5.   

    谢谢楼上的,但我还是不大明白,类似一个string数组么...那怎么不直接用String[]不就可以了么