【问题标题】:The GridView 'OrdersGridView' fired event RowDeleting which wasn't handledGridView 'OrdersGridView' 触发了未处理的事件 RowDeleting
【发布时间】:2010-08-23 00:25:55
【问题描述】:

我一遍又一遍地遇到这个错误。

将数据加载到 GridView 可以正常工作,但是当我想删除一行时,我遇到了该错误。

<asp:GridView ID="OrdersGridView" runat="server" AutoGenerateColumns="False" onrowdeleted="OrdersGridView_RowDeleted">
    <Columns>
        <asp:TemplateField HeaderText="Product Name">
            <ItemTemplate>
                <asp:HiddenField runat="server" ID="HiddenField1" Value='<%#Eval("oid")%>'></asp:HiddenField>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="titel" HeaderText="Name" />
        <asp:BoundField DataField="oid" HeaderText="Itemno" />
        <asp:BoundField DataField="prijs" HeaderText="Price" />
        <asp:CommandField ButtonType="Link" CausesValidation="false" HeaderText="Update" ShowDeleteButton="True" />
        <asp:BoundField DataField="prijs" HeaderText="Subtotal" />
    </Columns>
</asp:GridView>

C# 代码隐藏 - 我并没有真正从数据库中删除该行,但这是一个测试:

protected void OrdersGridView_RowDeleted(object sender, System.Web.UI.WebControls.GridViewDeletedEventArgs e)
{
    if (e.Exception != null)
    {
        lblStatus.Text = e.Exception.ToString();
    }
    else 
    {
        string sValue = ((HiddenField)OrdersGridView.SelectedRow.Cells[1].FindControl("HiddenField1")).Value;
        lblStatus.Text = sValue;
    }
}

但点击后,我得到一个大黄页,并出现下一个错误:

GridView 'OrdersGridView' 触发了未处理的事件 RowDeleting。

【问题讨论】:

    标签: c# gridview


    【解决方案1】:

    如果有一个删除按钮,甚至是 GridView 中具有删除命令名称的常规按钮,将自动尝试触发 OnRowDeleting。您可以只添加它以使事情变得愉快,但不要让它做任何事情,以免影响您的删除行为。

    您可以将 OnRowDeleting 添加到您的 GridView:

    <asp:GridView ID="OrdersGridView" runat="server" AutoGenerateColumns="False" onrowdeleted="OrdersGridView_RowDeleted" OnRowDeleting="OrdersGridView_RowDeleting">
    

    然后在你的 CodeBehind 中添加:

    void OrdersGridView_RowDeleting (object sender, GridViewDeleteEventArgs e)
    {
    }
    

    【讨论】:

    • 哇,微软哈哈。我一直在寻找几个小时,无法相信在 4.5 中有这样的行为。谢谢
    【解决方案2】:

    将您的行命令名称从 delete 更改为任何其他名称,例如 deleterecord

    【讨论】:

      【解决方案3】:

      看起来您正在处理“onrowdeleted”事件,而不是“RowDeleting”事件

      在您的标记中,更改: onrowdeleted="OrdersGridView_RowDeleted"

      到 RowDeleting="OrdersGridView_RowDeleting"

      查看此事件的文档:您还将看到您的处理程序的签名需要更改: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.onrowdeleting.aspx 您的新处理程序将如下所示:

       protected void OrdersGridView_RowDeleting(object sender, System.Web.UI.WebControls.GridViewDeleteEventArgs e) { 
       if (e.Exception != null) { 
          lblStatus.Text = e.Exception.ToString(); 
         } 
         else 
         {
          string sValue = ((HiddenField)OrdersGridView.SelectedRow.Cells[1].FindControl("HiddenField1")).Value; lblStatus.Text = sValue; 
          } 
       }
      

      发生 RowDeleting 事件,然后发生 onrowdeleted 事件。 RowDeleting 可能让您取消事件。

      【讨论】:

      • 我已经改变了它,但它没有用,我得到了同样的错误但我有 RowDeleting="OrdersGridView_RowDeleting" 和 RowDeleted="OrdersGridView_RowDeleted" 在阅读了关于 rowdeleting 之后,我跳过了一个原因我不想问用户他/她是否可以删除该行,我只想删除它。
      • 网格视图绑定到数据,并允许某人删除记录:此事件让您告诉网格如何执行此操作。这个错误是说“你要求我删除一条记录,但你没有告诉我如何删除”。 RowDeleted 将在删除发生后进行。您能否指出它是如何不起作用的(相同的错误、不同的错误、lblStatus.Text 或 sValue 没有预期值)?谢谢
      • 在同一个黄色错误页面上出现同样的错误,该错误甚至没有显示在我的 lblstatus 标签上。它是否与我将更改的文件发布到我的主机有关。我的本地空间没有错误。
      • 本地没有出错?这很奇怪。它在本地表现是否符合预期?我的第一个想法是检查 aspx 和 dll 是否已正确发布。
      • 我只上传了aspx和aspx.cs文件,还没有创建dll……
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多