![]() |
Web Development »
ASP.NET Controls »
Grid Controls
Intermediate
License: The Code Project Open License (CPOL)
Simple (non-JS) GridView Delete ConfirmationBy Daniel MorrisA simple server-side solution for displaying a confirmation message upon deleting an item in a GridView. |
C#2.0, C#3.0, .NET, WebForms, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
A common requirement in non-trivial data editing forms is to request confirmation of pending deletions. However, the default behaviour of the .NET GridView control on deletion is to commit the deletion without soliciting any further feedback from the user. This behaviour does tend to make GridView-based data editing forms prone to accidental deletion ("I swear I pressed the 'Edit' link...").
Numerous solutions to the above problem have been documented. The approach discussed here is a simple server-side solution which doesn't require the use of JavaScript popups. An example screenshot of the approach in action is shown below, with the third record (TaskID 4) displaying the Confirm link following the use of the Delete link.

The server-side deletion confirmation approach involves:
gridview_RowDeleting event handler.Rather than using a GridView CommandField for rendering the Edit and Delete Command Links, templated LinkButtons are used instead; one LinkButton for Edit (with a CommandName of 'Edit') and another LinkButton for Delete (with a CommandName of 'Delete'). The use of explicit controls here allows us to manipulate the Command Links server-side on post-back. Note that the remainder of the GridView mark-up has been omitted from the sample provided below.
// rather than use a CommandField, i.e...
<asp:CommandField ShowEditButton="true" ShowDeleteButton="true" />
// ...explicitly list each command as a LinkButton in a Template Field instead
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkEdit" runat="server"
CommandName="Edit" Text="Edit" />
<asp:LinkButton ID="lnkDelete" runat="server"
CommandName="Delete" Text="Delete" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="lnkUpdate" runat="server"
CommandName="Update" Text="Update" />
<asp:LinkButton ID="lnkCancel" runat="server"
CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
</asp:TemplateField>
The RowDeleting event handler needs to accomplish two tasks:
GridView item through the RowDeleting event handler).GridView item if the Confirm Command Link has been pressed (i.e., on second transit of a GridView item through the RowDeleting event handler).The approach used here is a bit lazy, but avoids complicating the solution with additional complexity for what is a fairly straightforward process, which goes something like this:
CommandName of the Delete Command Link initiates row deletion on the GridView. The first event fired in the row deletion pipeline is the RowDeleting event. By handling this event, we have the opportunity to control the outcome of the deletion process (e.g., by cancelling the event), plus we can also update the GridView content as desired.GridView item requires the item to transit the RowDeleting handler twice. On first transit, the text of the Delete Command Link (i.e., the LinkButton with the ID "lnkDelete") is updated from 'Delete' to 'Confirm', and further processing along the GridView item deletion pipeline is cancelled by setting the Cancel property of the incoming GridViewDeleteEventArgs argument to true. On second transit of the GridView item through the RowDeleting handler, we effectively recognize that the row deletion event was fired by a Confirm link by the simple fact that the text of the DeleteCommand link is not 'Delete' (but rather 'Confirm'). In this case, the deletion proceeds as normal.CommandName to 'Cancel'.protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
// Grab reference to the Delete Command link.
LinkButton lnk =
(LinkButton)GridView1.Rows[e.RowIndex].FindControl("lnkDelete");
// If the Command link text is 'Delete', display a 'Confirm' link.
if (lnk.Text == "Delete")
{
lnk.Text = "Confirm";
e.Cancel = true; // Don't want to delete just yet. Need confirmation first.
LinkButton lnk2 =
(LinkButton)GridView1.Rows[e.RowIndex].FindControl("lnkEdit");
lnk2.Text = "Cancel";
lnk2.CommandName = "Cancel";
}
// Otherwise, the Delete command will process to completion as normal.
}
The above solution provides a workable approach to implementing a Delete Confirm functionality in a GridView. One possible embellishment to make the solution a little more user-friendly would be to change the CssClass of the pending deletion row to make it a bit more obvious that:
| You must Sign In to use this message board. | |||||||||||||||||||||||
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+PgUp/PgDown to switch pages.
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 16 May 2008 Editor: Smitha Vijayan |
Copyright 2008 by Daniel Morris Everything else Copyright © CodeProject, 1999-2010 Web18 | Advertise on the Code Project |