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的页索引。

gridviewrowcommand事件未触发

必须不能在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中删除所有事件处理程序,然后重建代码,然后一次将它们添加回一个来修复此问题的版本。