2011-06-15 57 views
4

我產生幾個按鈕連接到它們的事件處理程序是這樣的:現在CommandEventArgs和事件問題

Button pgs = new Button();//Create New Topic 
pgs.Width = 20; 
pgs.Command += obtainTopicsPerPage_Click; 
pgs.CommandName = tPage.ToString(); 
pgs.Text = tPage.ToString(); 
btns.Add(tPage.ToString()); 
buttons.Add(pgs); 
} 

void obtainTopicsPerPage_Click(Object sender, CommandEventArgs e) 
{ 
    foreach (var item in tPages) 
    { 
     if (item.Key == e.CommandName) 
     { 
      foreach (var posts in item.Value) 
      { 
       posts.ExecuteAll(); 
      } 
     } 
    } 
    MyButtonTable(); 
} 

,當我點擊按鈕的事件處理程序永遠不會觸發。我檢查與調試器,,當我按一下按鈕,只有回傳,,但它不到達事件處理程序內functoin

更新:

void Page_PreInit(object sender, EventArgs e) 
{ 
    List<Button> btn=(List<Button>)ViewState["Buttons"]; 
    foreach (var item in btn) 
    { 
      item.Width = 20; 
      item.Command += obtainTopicsPerPage_Click; //resigning the eventhandlers from the begining 
      item.CommandName = tPage.ToString(); 
      item.Text = tPage.ToString(); 
    } 
} 
+2

您是否在發佈後重新連接按鈕事件? – WraithNath 2011-06-15 10:45:34

+0

不應該是pgs.Command + = new CommandEventHandler(this.obtainTopicsPerPage_Click); ? – Reniuz 2011-06-15 11:07:55

+0

不是真的,Renius ...,不,我不WraithNath – Matrix001 2011-06-15 11:23:44

回答

3

這往往是當案件動態生成按鈕。當頁面回發時,頁面不再有按鈕,因此無法將它們綁定到事件處理程序。

最簡單的解決方案是確保您在頁面的每次加載時都重新生成Page_Init中的所有按鈕。

+0

但我生成的按鈕是一個列表,它是通過代碼動態生成的。根據論壇中有多少帖子生成...應該我將列表保存爲視圖狀態,然後將其放入page_init中進行迭代? – Matrix001 2011-06-15 10:58:00

+0

您可以使用您用於生成原始按鈕列表的相同代碼。您只需確保它在每一頁page_init上運行,以便按鈕始終存在。如果這些按鈕可能在第一次加載和回發之間發生了變化,那麼您可能希望將動態數據存儲在視圖狀態中,以便再次構建原始按鈕組。總而言之,關鍵在於重建它們。 – 2011-06-15 11:08:07

+0

那麼我如何保護他們的事件處理者......這樣做是否足夠?看到我上面的問題更新 – Matrix001 2011-06-15 11:22:01