可以';t为GridView中动态创建的按钮连接Click事件

本文关键字:创建 按钮 连接 事件 Click 动态 GridView 可以 | 更新日期: 2023-09-27 18:28:33

我正在为GridView动态创建模板,并在我的ASP.NET web应用程序中对其进行数据绑定。我添加了标题列模板以及一列按钮。我遇到的问题是,连接按钮的点击事件似乎永远不会启动。我尝试过用多种方式抓住按钮(在DataBind()方法之后),但当点击按钮时,似乎什么都没有。

注意GridView位于ASP:UpdatePanel和AJAX手风琴窗格(Site.Master上的ToolkitScriptManager)内。

以下是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);
        }
    }
}

按钮被找到了,我可以访问它们,但按钮中的单击事件从未触发我在代码中的点击事件方法。

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

有没有想过我会怎么搞砸这件事?我有一种感觉,当用户点击按钮时,它与页面生命周期内网格视图的当前状态有关,但不确定如何继续。

可以';t为GridView中动态创建的按钮连接Click事件

不久前,我在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);

希望这能解决你的问题!