gpt4 book ai didi

c# - 无法为 GridView 中动态创建的按钮连接 Click 事件

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:09 24 4
gpt4 key购买 nike

我正在为 GridView 动态创建模板,并在我的 ASP.NET 网络应用程序中对其进行数据绑定(bind)。我添加了标题列模板以及一列按钮。我遇到的问题是为按钮连接点击事件似乎永远不会触发。我试过以多种方式捕获按钮(在 DataBind() 方法之后),但点击按钮时似乎没有任何反应。

注意:GridView 位于ASP:UpdatePanel 和AJAX Accordion 面板(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)
{
}

关于我如何搞砸这一切的任何想法?我感觉它与用户单击按钮时页面生命周期内 gridview 的当前状态有关,但不确定如何继续。

最佳答案

不久前,我在将更新面板放入 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);

希望这能解决您的问题!

关于c# - 无法为 GridView 中动态创建的按钮连接 Click 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26678494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com