2012-05-18 2 views
2

Я динамически создавая asp.net RadioButton и вставить его в свой веб-страницы:обработчика событий для динамически созданного управления

RadioButton rb = new RadioButton(); 
rb.ID = "rb" + ReportPKey; 
rb.Text = "ReportName"; 
phUiControls.Controls.Add(rb); 

я следующий метод:

protected void rb_CheckedChanged(object sender, EventArgs e) 
{ 
    // stuff 
} 

Как я подключите это так, чтобы rb_CheckedChanged был запущен, когда нажата кнопка rb?

+0

rb.CheckedChanged + = rb_CheckedChanged –

+0

Также помните, что вам нужно будет воссоздать это состояние управления в методе 'Init' при обратной передаче, иначе событие не будет вызываться. – Tejs

ответ

1

Один из способов сделать это с анонимным делегатом (чистым для этих типов сценариев):

var rb = new RadioButton{ ID = "rb" + ReportPKey, Text = "ReportName" }; 
phUiControls.Controls.Add(rb); 

rb.CheckedChanged += (sender, e) => { 
    // event handler code 
}; 

Или (как несколько людей указали):

rb.CheckedChanged += rb_CheckedChanged 

В контексте жизненный цикл страницы:

protected override OnInit(EventArgs e){ 
    BuildDynamicControls(); 
    base.OnInit(e); 
} 

private void BuildDynamicControls(){ 
    var rb = new RadioButton{ ID = "rb" + ReportPKey, Text = "ReportName" }; 
    phUiControls.Controls.Add(rb); 

    rb.CheckedChanged += (sender, e) => { 
     // event handler code 
    }; 
} 
+0

Если вы используете анонимного делегата, как вы сможете подключить его снова к обратной передаче? – Servy

+0

Динамические элементы управления необходимо воссоздавать при каждом выполнении страницы; вы просто подключили событие после создания динамического элемента управления. –

0
RadioButton rb = new RadioButton(); 
rb.ID = "rb"+ReportPKey; 
rb.Text = ReportName ; 
rb.CheckedChanged += rb_CheckedChanged 
phUiControls.Controls.Add(rb); 
Смежные вопросы