【问题标题】:GridView RowCommand event not firingGridView RowCommand 事件未触发
【发布时间】: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) 语句中。

标签: c# asp.net gridview


【解决方案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 中删除所有事件处理程序,然后重新构建代码,然后一次将它们添加回来,从而解决了这个问题的版本。

                  【讨论】:

                  • 不要认为这会改变任何事情。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-11-11
                  • 2017-09-03
                  • 2018-11-23
                  相关资源
                  最近更新 更多