主题:  .net动态生成控件问题

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#12005/7/23 19:18:00
我用一个函数生成控件,但无法响应控件的事件,想请教一下。

private void CreateControl()
{
    for (int i = 1; i <= 10; i++)
    {
        LinkButton myButton = new LinkButton();
        myButton.Text = " " + pageCount.ToString();
        myButton.CssClass = "2";
        myButton.Click += new EventHandler(myButton_Click);

        plhPage.Controls.Add(myButton);
    }
}

private void myButton_Click(object sender, EventArgs e)
{
    Response.Redirect("test.aspx?Action=" + ((LinkButton)sender).Text);
}


非常大鱼

缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#22005/7/25 11:26:08
namespace AddControl
{
	/// <summary>
	/// WebForm1 的摘要说明。
	/// </summary>
	public class WebForm1 : System.Web.UI.Page
	{
		protected System.Web.UI.WebControls.Panel Panel1;
	
		private void Page_Load(object sender, System.EventArgs e)
		{
			for(int i=0;i<5;i++)
			{
				LinkButton myButton = new LinkButton();
				myButton.Text = "Page " + i.ToString() + " | ";
				myButton.Click+=new EventHandler(myButton_Click);
				this.Panel1.Controls.Add(myButton);
			}
		}

		#region Web 窗体设计器生成的代码
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
			//
			InitializeComponent();
			base.OnInit(e);
		}
		
		/// <summary>
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
		/// 此方法的内容。
		/// </summary>
		private void InitializeComponent()
		{    
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion

		private void myButton_Click(object sender, EventArgs e)
		{
			Response.Write("<script>");
			Response.Write("alert('"+((LinkButton)sender).Text+"');");
			Response.Write("</script>");
		}
	}
}


测试没有问题



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#32005/7/25 15:44:05
谢缺缺了,出格问题是出在执行代码放在(!IsPostBack)内了,放在onLoad中可以执行。
不过还是有问题,因这些控件的生成与数据库记录有关,这样每次动作都要执行一次,挺烦的,怎样控制一下好些,用ViewSate?


非常大鱼