gridviewrowcommand事件未触发
本文关键字:事件 gridviewrowcommand | 更新日期: 2023-09-27 18:17:39
我有一个GridView,看起来像这样:
<asp:GridView
ID="GridView1"
AllowPaging="true"
OnRowCommand="RowCommand"
OnPageIndexChanging="gridView_PageIndexChanging"
Runat="server">
<Columns>
...
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button1" ButtonType="Button" CommandName="ItemExport" CommandArgument='<%# Eval("EXPORT") %>'
Text="Export" runat="server" />
</ItemTemplate>
</asp:TemplateField>
...
</Columns>
</asp:GridView>
RowCommand
:
protected void RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "ItemExport")
{
// etc.
}
}
单击按钮根本不会触发RowCommand
事件。然而,RowCommand
火灾时,我点击GridView的页索引。
必须不能在Page_Load中绑定回发时的网格,只有当发生某些更改导致网格重新加载数据时(例如:排序(分页),并且只能在适当的事件处理程序中使用。
另一个可能的原因:您是否在某处禁用了ViewState ?
在按钮标签中使用CausesValidation="false"
。
我刚刚有一个同事遇到了同样的问题;这是由于asp:GridView
元素中没有设置onrowcommand=
属性造成的。这应该设置为将要处理事件的处理程序的名称。
…以防有人有同样的问题!
把grid.Databind()
放到if (!IsPostBack)
里面
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
grid.DataBind();
}
}
尝试了以上的答案,仍然无法得到回复。最终成为唯一ID问题。我有两个<ItemTemplate>
按钮具有相同的id。(在不同的网格视图。第二个是在用户控件
将<asp:Button ID="" />
更改为唯一ID解决了我的post back问题。
我只是想给那些尝试过其他选择但运气不好的人发个帖子。
如果你的代码像这样:
protected void Page_Load(object sender, EventArgs e)
{
BindGrid(dgv);
if (!IsPostBack)
{
}
}
将BindGrid()
放到!isPostBack
块中
你也可以检查HttpContext.Current.Request。Form["__EVENTTARGET"],如果它以控件的ID结束,重新绑定GridView并使用Page。使用事件目标查找触发事件的控件
我的问题是requiredfieldvalidator
解决方案是:我在post back禁用它,然后在row命令后重新启用它。
做了所有这些,没有得到什么,然后发现了这个:在html中的GridView1定义行onrowcommand="GridView1_RowCommand"。
我通过从GridView中删除所有事件处理程序,然后重建代码,然后一次将它们添加回一个来修复此问题的版本。