GridView "OrdersGridView" запустил событие RowDeleting, которое не было обработано

Я получаю эту ошибку снова и снова.

Загрузка данных в 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>

С# codebehind - я действительно не удаляю строку из базы данных, но это тест:

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;
    }
}

Но после нажатия, я получаю желтую страницу bigass со следующей ошибкой:

В GridView 'OrdersGridView' было запущено событие RowDeleting, которое не обрабатывалось.

Ответ 1

При нажатии кнопки "Удалить" или даже обычной кнопки в GridView с CommandName для удаления автоматически будет запускаться 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)
{
}

Ответ 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, вероятно, позволяет отменить событие.