GridView RowCommand 事件未触发

Posted

技术标签:

【中文标题】GridView RowCommand 事件未触发【英文标题】:GridView RowCommand event not firing 【发布时间】:2012-01-19 15:38:51 【问题描述】:

我有一个看起来像这样的 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 事件。但是,当我在 GridView 的分页器中单击页面索引时,RowCommand 会触发。

【问题讨论】:

何时将网格绑定到数据源,仅if(!Postback)?! 是的,问题是绑定没有包含在if(!isPostBack) 语句中。 【参考方案1】:

您必须将您的网格绑定到 Page_Load 中的回发上,只有当某些更改导致网格重新加载数据(例如排序、分页)并且仅在适当的事件处理程序中。

另一个可能的原因:您是否在某处禁用了 ViewState?

【讨论】:

不敢相信这困扰了我好几个小时...只是坐在这里茫然地盯着一些没有功能的 ASP.NET 代码...都是因为我设置了 EnableViewState="false" :@跨度> 当我在 if(!IsPostBack) 中绑定 GridView 时,寻呼机不起作用:( @MazdakShojaie 您必须为 GridView.PageIndexChanged 事件添加一个事件处理程序,并在该处理程序中重新绑定。查看这篇 MSDN 文章 msdn.microsoft.com/en-us/library/… 对我来说,是 grdiview 上的“EnableViewState”设置为 TRUE。将其设置为 FALSE 并开始工作。谢谢。【参考方案2】:

在按钮标签中使用CausesValidation="false"。它可以解决问题。

【讨论】:

【参考方案3】:

我刚有个同事遇到了同样的问题;这是由onrowcommand= 属性未在asp:GridView 元素中设置引起的。这应该设置为将处理事件的处理程序的名称。

...以防万一有人遇到同样的问题!

【讨论】:

【参考方案4】:

grid.Databind() 放入if (!IsPostBack)

protected void Page_Load(object sender, EventArgs e)

    if (!IsPostBack)
    
        grid.DataBind();
    

【讨论】:

【参考方案5】:

尝试了上述答案,但仍然无法得到回复。最终成为唯一 ID 问题。我有两个 &lt;ItemTemplate&gt; 带有相同 ID 的按钮。 (在不同的网格视图中。我的第二个是在用户控件中)

&lt;asp:Button ID="" /&gt; 更改为唯一 ID 为我解决了回发问题。

只是想我会为其他尝试其他选项但没有运气的人发帖。

【讨论】:

【参考方案6】:

如果你的代码是这样的:

protected void Page_Load(object sender, EventArgs e)

    BindGrid(dgv);
    if (!IsPostBack)
    

    

BindGrid() 放在!isPostBack 块内

【讨论】:

【参考方案7】:

您还可以检查 HttpContext.Current.Request.Form["__EVENTTARGET"] 如果它以控件的 ID 结尾,则重新绑定 GridView 并将 Page.FindControl 与事件目标一起使用以查找触发事件

【讨论】:

【参考方案8】:

我的问题是requiredfieldvalidator

解决方案是:我在回发时禁用它,然后在行命令后重新启用它。

【讨论】:

【参考方案9】:

他们都做了,但一无所获然后发现:onrowcommand="GridView1_RowCommand" 在 html 中的 GridView1 定义行上。

【讨论】:

【参考方案10】:

我通过从 GridView 中删除所有事件处理程序,然后重新构建代码,然后一次将它们添加回来,从而解决了这个问题的版本。

【讨论】:

不要认为这会改变任何事情。

以上是关于GridView RowCommand 事件未触发的主要内容,如果未能解决你的问题,请参考以下文章

如何在gridview的rowcommand事件中在新选项卡中打开页面?

我们如何对 RowCommand、RowDeleting 等 gridview 事件进行 ajax 调用

如何在 c# ASP.NET 中使用 GridView_RowCommand 事件从 GridView 获取图像

gridView 事件怪怪问题

GridView PageIndexChanging 事件未在 UpdatePanel 内触发

Gridview 行命令事件未使用 jquery mobile 触发