2014-10-31 69 views
2

我正在爲我的ASP.NET Web應用程序中的GridView和數據綁定動態創建模板。我添加了標題欄模板以及一列按鈕。我遇到的麻煩是佈線按鈕的點擊事件似乎從未觸發。我嘗試過以多種方式抓取按鈕(在DataBind()方法之後),但是單擊按鈕時似乎沒有任何東西被觸發。無法在GridView中爲動態創建的按鈕建立Click事件

注意:該GridViewASP:UpdatePanel和AJAX手風琴窗格(ToolkitScriptManager上的Site.Master)內。

這裏的aspx頁面(簡體)的相關部分...

<ajaxToolkit:AccordionPane ID="accordionSelfRegisteredUsers" runat="server"> 
    <Header>Find All Self-Registered Users</Header> 
    <Content> 
     <asp:UpdatePanel ID="updatepnlSelfRegisteredUsers" runat="server"> 
      <ContentTemplate> 
       <div id="divFixedHeaderSelfRegisteredUsers"></div> 
       <div id="divSelfRegisteredUsers"> 
        <asp:GridView ID="gridviewSelfRegisteredUsers" runat="server" 
         AutoGenerateColumns="False" /> 
       </div> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </Content> 
</ajaxToolkit:AccordionPane> 

這裏是頁的C#代碼。

的一種方式......

List<Button> gvConfirmButtons = new List<Button>(); 
foreach (GridViewRow row in gridviewSelfRegisteredUsers.Rows) 
{ 
    foreach (Control c in row.Controls) 
    { 
     if (typeof(DataControlFieldCell) != c.GetType()) 
     { 
      continue; 
     } 
     foreach (Control cf in c.Controls) 
     { 
      if (typeof(Button) == cf.GetType()) 
      { 
       gvConfirmButtons.Add((Button)cf); 
      } 
     } 
    } 
} 
foreach (Button b in gvConfirmButtons) 
{ 
    b.Click += new EventHandler(btnGVSRUConfirm_Click); 
} 

而另一個我想...

foreach (GridViewRow row in gridviewSelfRegisteredUsers.Rows) 
{ 
    foreach (Control c in row.Controls) 
    { 
     if (typeof(DataControlFieldCell) != c.GetType()) 
     { 
      continue; 
     } 
     for (int i = 0; i < gridviewSelfRegisteredUsers.Rows.Count; i++) 
     { 
      //find buttons by client ID 
      Button b = (Button)c.FindControl(
       "contentMain_gridviewSelfRegisteredUsers_btnConfirm_" + i); 
      b.Click += new EventHandler(btnGVSRUConfirm_Click); 
     } 
    } 
} 

按鈕被發現,我可以訪問它們,但是從按鈕的Click事件永遠不會觸發單擊事件方法我有代碼。

private void btnGVSRUConfirm_Click(object sender, EventArgs e) 
{ 
} 

任何想法,我怎麼可能會搞砸了嗎?我有一種感覺,它與頁面生命週期中當前按鈕被用戶點擊時的gridview狀態有關,但不知道如何繼續。

+0

何時/何處在頁面生命週期中,您是否運行附加處理程序的代碼? – Andrei 2014-10-31 16:17:04

+0

我在這個頁面上有一個導航菜單,所以當用戶單擊該導航按鈕查看有關該內容的所有內容時,都會發生。 – 2014-11-03 12:59:10

+0

我嘗試添加兩個.Attributes [「onclick」]和.OnClientClick將按鈕指向一個JavaScript方法,並且工作。我只是無法使用.Click在C#中使用服務器端方法。任何想法或疑難解答步驟嘗試將不勝感激。謝謝! – 2014-11-05 19:50:18

回答

1

當在ModalPopup控件中放置更新面板時,我有一個類似的問題。某些與__doPostback沒有正確連接到按鈕OnClick事件。不知道這是否是一個錯誤或什麼,但是這是我在Page_Load事件沒有解決的問題:

PostBackOptions opt = new PostBackOptions(this.YourButtonID); 
opt.AutoPostBack = true; 
opt.ClientSubmit = true; 
opt.PerformValidation = true; 
opt.RequiresJavaScriptProtocol = true; 

// This will put a '__doPostBack()' javascript call on the OnClick 
// event (using above options). 
this.YourButtonID.OnClientClick = ClientScript.GetPostBackEventReference(opt); 

希望這能解決您的問題!

相關問題