2014-10-31 83 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); 

希望这能解决您的问题!