还是动态添加控件 触发事件

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace WebApplication1
{
    
/// <summary>
    
/// Dy01 的摘要说明。
    
/// </summary>

    public class Dy01 : System.Web.UI.Page
    
{
        
protected System.Web.UI.WebControls.Button Button1;
        
protected System.Web.UI.HtmlControls.HtmlForm Form1;
        
private static bool AddIt = false;
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
// 在此处放置用户代码以初始化页面

            
//点了添加按钮之后不会马上添加下拉框  应为Page_Load在ButtonClick之前执行, AddIt还是上次的值
            
//要想控件能触发事件 必须在PageLoad事件之前判断.
            if( AddIt )
            
{
                DropDownList ddl 
= new DropDownList();

                ddl.AutoPostBack 
= true;
                ddl.SelectedIndexChanged 
+= new EventHandler(ddl_SelectedIndexChanged);

                
this.Form1.Controls.Add( ddl );

                
//子项要在父控件添加之后添加  这样ViewState才会保存 追赶
                ddl.Items.Add(new ListItem("1","1") );
                ddl.Items.Add(
new ListItem("2","2") );

            }

            
        }


        
Web 窗体设计器生成的代码

        
private void Button1_Click(object sender, System.EventArgs e)
        
{
            AddIt 
= true;
            
        }


        
private void ddl_SelectedIndexChanged(object sender, EventArgs e)
        
{
            Response.Write(
"触发了下拉框的回传事件");
        }

    }

}

实现:
点击按钮后添加一个下拉框 下拉框可以触发事件。

1. 控件要在Load事件之前添加才能触发自己的回传事件。
2. 先添加父控件再添加它的子项,这样可以保存ViewState. 有一个周期追赶的过程。

posted on 2007-07-26 17:14  YZG  阅读(402)  评论(1编辑  收藏  举报

导航