2011-11-28 88 views
1
protected void Button1_Click(object sender, EventArgs e) 
{ 
    TableRow tb = new TableRow(); 
    TableCell tc = new TableCell(); 

    DropDownList db = new DropDownList(); 
    db.Items.Add("Bangalore"); 
    db.Items.Add("Mandya"); 
    db.Items.Add("Hassan"); 

    tc.Controls.Add(db); 
    tb.Controls.Add(tc); 

    Table1.Controls.Add(tb); 

    db.SelectedIndexChanged += db_SelectedIndexChanged; 
    db.AutoPostBack = true; 
} 

private void db_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    label.text = "welcome"; 
} 

当此代码在Button1_Click事件中执行时,db_SelectedIndexChanged不会执行。但是,当我在Page_Load事件中放置相同的Button1_Click代码块时,将执行db_SelectedIndexChanged为什么我的SelectedIndexChanged事件不会在Button_Click中触发?

这背后的原因是什么?

回答

5

尽量把

db.SelectedIndexChanged += db_SelectedIndexChanged; 
db.AutoPostBack = true; 

在Page_Load事件。

不包装db.SelectedIndexChanged + = db_SelectedIndexChanged;在!Page.IsPostBack中,事件需要在每次加载时连线

1

您正在创建一个动态控件。除非您在页面的PreInit方法中创建控件,否则该事件不会触发。

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    DropDownList db = new DropDownList(); 
    db.Items.Add("Bangalore"); 
    db.Items.Add("Mandya"); 
    db.Items.Add("Hassan"); 
    db.SelectedIndexChanged += db_SelectedIndexChanged; 
    db.AutoPostBack = true; 

    tc.Controls.Add(db); 
} 

检查Page Life cycle了解更多信息。

0
protected void Button1_Click(object sender, EventArgs e) 
    { 
    TableRow tb = new TableRow(); 
    TableCell tc = new TableCell(); 

    DropDownList db = new DropDownList(); 
    db.Items.Add("Bangalore");` 
    db.Items.Add("Mandya"); 
    db.Items.Add("Hassan"); 

    tc.Controls.Add(db); 
    tb.Controls.Add(tc); 

    Table1.Controls.Add(tb); 

    db.SelectedIndexChanged += db_SelectedIndexChanged; 
    db.AutoPostBack = true; 
    db_SelectedIndexChanged(null,null); // use this line, i hope it will work now. 

    } 

    private void db_SelectedIndexChanged(object sender, EventArgs e) 
    { 
    label.text = "welcome"; 
    } 

你可以试试这个。

相关问题