2012-06-15 115 views
0

我需要生成一个动态列表的按钮,我已经做了,附加了一个事件处理程序。动态生成的按钮,点击不被执行

但是,事件处理程序没有被执行。

private void GetOptions(EcoBonusRequest request) 
     { 
      var ecobonuswworkflow = WorkflowFactory.CreateEcobonusWorkflow(); 
      ecobonuswworkflow.SetCurrentStep(request.CurrentStatus); 
      var currentoptions = ecobonuswworkflow.GetCurrentOptions(); 
      foreach(var option in currentoptions) 
      { 
       var btn = new Button() {Text = option.OptionName}; 
       btn.Click +=new EventHandler(btn_Click); 
       Buttons.Controls.Add(btn); 
      } 

     } 


     void btn_Click(object sender, EventArgs e) 
     { 
      var btn = (Button) sender; 
      string command = btn.Text; 
      EcoBonusRequest request = this.GetDBRequest(RequestBaseId.Value); 
      EcoBonusRequestBL.AddWorkflowHistoryItem(request, command,CurrentUser, command); 
     } 
+0

您需要在每次回发时重新创建这些按钮(具有与之前相同的ID并且最晚在page_load中)。阅读(特别是第3部分)[真正理解动态控制](http://tinyurl.com/yfc66o) –

+0

你会如何重构这个? –

+0

说实话,如果可能的话,我会只使用[网络数据绑定控件](http://msdn.microsoft.com/zh-cn/library/ms228214.aspx)像中继器。 –

回答

2

您在页面中动态添加的控件必须添加到Page_init事件中,并且它们必须具有唯一的ID。如果要在用户可以输入或更改值的地方添加文本框或其他控件,则在重新添加这些控件时,每次回发时都必须具有相同的ID。