我动态创建GridView
的模板,并在我的ASP.NET网络应用中对其进行数据绑定。我添加了标题列模板以及一列按钮。我遇到的麻烦是,点击按钮的点击事件似乎永远不会触发。我尝试以多种方式抓取按钮(在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);
}
}
}
找到了按钮,我可以访问它们,但是按钮中的click事件永远不会触发我在代码中的click事件方法。
private void btnGVSRUConfirm_Click(object sender, EventArgs e)
{
}
有关我如何搞砸这个问题的任何想法?我感觉它与页面生命周期中当用户点击按钮时网格视图的当前状态有关,但不知道如何继续。
答案 0 :(得分:1)
在ModalPopup控件中放置更新面板时,我有一个类似的问题。与__doPostback没有正确连接到OnClick事件按钮的事情。不确定它是否是一个bug或者是什么,但这是我在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);
希望这能解决您的问题!