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