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>
C# 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;
}
}
Но после нажатия я получаю большую желтую страницу со следующей ошибкой:
GridView 'OrdersGridView' вызвал событие RowDeleting, которое не было обработано.
3 ответа
Наличие кнопки "Удалить" или даже обычной кнопки в 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)
{
}
Измените имя команды строки с delete на любое другое, например deleterecord
Похоже, вы обрабатываете событие onrowdeleted, а не событие RowDeleting
в вашей разметке измените: onrowdeleted = "OrdersGridView_RowDeleted"
to 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, вероятно, позволяет отменить событие.