GridView RowCommand事件未触发

时间:2011-12-13 19:06:35

标签: c# asp.net gridview

我有一个看起来像这样的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

10 个答案:

答案 0 :(得分:48)

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

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

答案 1 :(得分:4)

我刚遇到一位遇到同样问题的同事;他的原因是onrowcommand=元素未设置asp:GridView属性。这应该设置为将处理事件的处理程序的名称。

...万一有人有同样的问题!

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        grid.DataBind();
    }
}

答案 4 :(得分:2)

如果您的代码是这样的:

protected void Page_Load(object sender, EventArgs e)
{
    BindGrid(dgv);
    if (!IsPostBack)
    {

    }
}

BindGrid()放在!isPostBack

答案 5 :(得分:1)

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

答案 6 :(得分:1)

我的问题是requiredfieldvalidator

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

答案 7 :(得分:1)

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

<asp:Button ID="" />更改为唯一ID可解决我的回复问题。

以为我会为任何其他没有运气尝试其他选项的人发帖。

答案 8 :(得分:0)

全部都找到了,却无所获,然后发现了这一点:html的GridView1定义行上的onrowcommand =“ GridView1_RowCommand”。

答案 9 :(得分:0)

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