C# GridView行命令事件未触发

C# GridView行命令事件未触发,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个GridView,看起来像这样: <asp:GridView ID="GridView1" AllowPaging="true" OnRowCommand="RowCommand" OnPageIndexChanging="gridView_PageIndexChanging" Runat="server"> <Columns> ... <asp:TemplateField&g

我有一个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>
protected void Page_Load(object sender, EventArgs e)
{
    BindGrid(dgv);
    if (!IsPostBack)
    {

    }
}

单击该按钮根本不会触发
row命令
事件。但是,当我在GridView的寻呼机中单击页面索引时,
RowCommand
会触发。

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


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

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


。。。以防有人有同样的问题

您还可以检查HttpContext.Current.Request.Form[“\uu EVENTTARGET”],如果它以控件的ID结尾,请重新绑定GridView,并使用Page.FindControl和事件目标来查找触发事件的控件

在按钮标记中使用
CausesValidation=“false”
。它可以解决问题。

如果您的代码如下所示:

<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>
protected void Page_Load(object sender, EventArgs e)
{
    BindGrid(dgv);
    if (!IsPostBack)
    {

    }
}

BindGrid()
放入
中!isPostBack
block

如果(!isPostBack)


我的问题是
requiredfieldvalidator


解决方法是:我在post back中禁用它,然后在row命令后重新启用它。

尝试了上述答案,但仍然无法获得post back。最终成为一个独特的ID问题。我有两个带有相同ID的按钮的
。(在不同的网格视图中。我的第二个视图在用户控件中)

更改为唯一ID为我解决了回发问题


我想我会为任何一个尝试了其他选项却没有成功的人发帖。

把它们都做了,结果一无所获,然后在html中的GridView1定义行上发现了这个:onrowcommand=“GridView1\u RowCommand”

我修复了这个问题的版本,从GridView中删除所有事件处理程序,然后重新生成代码,然后一次将它们添加回一个

当您将网格绑定到数据源时,只有(!Postback)?!是的,问题是绑定没有包装在
if(!isPostBack)
语句中。真不敢相信这困扰了我好几个小时……只是坐在这里茫然地盯着一些无法正常工作的ASP.NET代码……这一切都是因为我设置了EnableViewState=“false”:@当我在if(!isPostBack)中绑定GridView时,寻呼机无法工作:(@MazdakShojaie您必须为GridView.PageIndexchange事件添加一个事件处理程序,并在该处理程序中重新绑定。请帮我查看这篇MSDN文章,在grdiview上“EnableViewState”设置为TRUE。将其设置为FALSE&它开始工作。谢谢。不要认为这会改变任何事情。