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

12

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

将数据加载到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 事件。

3个回答

13

在GridView中添加一个CommandName为delete的Delete按钮,甚至是普通的按钮,将自动尝试触发OnRowDeleting。你可以只是添加它使一切正常,但不要让它做任何事情,以免影响删除的行为。

你可以向GridView添加OnRowDeleting:

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

然后在你的 CodeBehind 中添加:

void OrdersGridView_RowDeleting (object sender, GridViewDeleteEventArgs e)
{
}

哇,微软笑死我了。我已经搜索了几个小时了,简直不敢相信4.5中会有这样的行为。谢谢。 - Machinegon

6

将您的行命令名称从“删除”更改为其他任何名称,例如“deleterecord”。


0

看起来你正在处理“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的内容后,我跳过了它,因为我不想询问用户是否确定删除行,我只想删除它。 - Janis
网格视图绑定数据,并允许某人删除记录:此事件使您能够告诉网格如何执行此操作。该错误提示“您要求我删除一条记录,但您没有告诉我如何执行。”在删除发生后,行已被标记为已删除。您能指出它为什么无法工作吗(是否出现相同的错误、不同的错误、lblStatus.Text或sValue的值与预期值不同)?谢谢。 - brian chandley
这是同一个黄色错误页面上的相同错误,甚至错误没有显示在我的lblstatus标签上。这可能与我将修改后的文件发布到主机有关。在我的本地空间中没有出现错误。 - Janis
错误在本地没有发生?这很奇怪。在本地它的表现是否符合预期?我的第一个想法是检查aspx和dll文件是否已经正确发布。 - brian chandley
如果您的aspx文件使用Inherits=<PageclassName>,则需要部署该dll以完全部署此修复程序。 - brian chandley
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接