在Web应用程序中,经常需要实现数据的删除功能。本文将介绍如何在ASP.NET中实现这一功能,包括如何向用户展示确认对话框以及如何处理删除过程中可能出现的错误。
将以Microsoft的Northwind数据库中的Product表为例,通过GridView控件展示数据,并使用ObjectDataSource控件实现数据的删除。
首先,需要初始化jQuery UI对话框插件,以便在用户尝试删除数据时显示确认对话框。
<script type="text/javascript">
$(function() {
InitializeDeleteConfirmation();
});
function InitializeDeleteConfirmation() {
$('#deleteConfirmationDialog').dialog({
autoOpen: false,
resizable: false,
height: 140,
modal: true,
buttons: {
"Delete": function() {
$(this).dialog("close");
},
"Cancel": function() {
$(this).dialog("close");
}
}
});
}
</script>
接下来,在GridView中添加一个TemplateField,并在其中添加一个ImageButton控件,用于触发删除操作。
<asp:TemplateField>
<ItemStyle Width="30px" HorizontalAlign="Center" />
<ItemTemplate>
<asp:ImageButton ID="IBtnDelete" runat="server" ToolTip="Click to delete" CommandArgument='<%# Eval("ProductID") %>' OnClientClick="javascript:return deleteItem(this.name, this.alt);" ImageUrl="~/Images/Delete.png" AlternateText='<%# Eval("ProductID") %>' CommandName="Delete" />
</ItemTemplate>
</asp:TemplateField>
当用户点击删除按钮时,将调用名为deleteItem的JavaScript函数,该函数将显示确认对话框。
function deleteItem(uniqueID, itemID) {
var dialogTitle = 'Permanently Delete Item ' + itemID + '?';
$('#deleteConfirmationDialog').html('<p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>Please click delete to confirm deletion.</p>');
$('#deleteConfirmationDialog').dialog({
title: dialogTitle,
buttons: {
"Delete": function() { __doPostBack(uniqueID, ''); $(this).dialog("close"); },
"Cancel": function() { $(this).dialog("close"); }
}
});
$('#deleteConfirmationDialog').dialog('open');
return false;
}
当用户确认删除时,GridView将发送删除命令(CommandName="Delete")和产品ID(CommandArgument)到ObjectDataSource控件。
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="Northwind.BusinessObject.Products" SelectMethod="SelectAll" SortParameterName="sortExpression" DeleteMethod="Delete" OnDeleted="ObjectDataSource1_Deleted">
<DeleteParameters>
<asp:Parameter Name="ProductID" Type="Int32" />
</DeleteParameters>
</asp:ObjectDataSource>
在Northwind.BusinessObject.Products对象中编写删除方法,该方法将删除指定的记录。
public static void Delete(int productID) {
ProductsDataLayer.Delete(productID);
}
在ObjectDataSource控件调用Deleted方法后,将触发ondeleted事件。在这里,可以检查删除过程中是否有错误发生。
protected void ObjectDataSource1_Deleted(object sender, System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs e)
{
Functions.ObjectDataSourceDeleted(sender, e, this.Page);
}
public static void ObjectDataSourceDeleted(object sender, System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs e, Page page)
{
if (e.Exception != null)
{
string errorMessage = Functions.RemoveSpecialChars(e.Exception.InnerException.Message);
ScriptManager.RegisterStartupScript(page, page.GetType(), "err_msg", "ShowError('" + errorMessage + "');", true);
e.ExceptionHandled = true;
}
}
如果删除过程中发生错误,将调用名为ShowError的JavaScript函数,传递错误信息。
function ShowError(errorMessage) {
$(document).ready(function() {
$('#deleteErrorDialog').html(errorMessage);
$('#deleteErrorDialog').dialog({
modal: true,
buttons: {
Ok: function() {
$(this).dialog("close");
}
}
});
});
}
要运行此代码,请确保下载并安装Microsoft的Northwind数据库,并在App_Code文件夹下的Helper文件夹中的Dbase.cs(Dbase.vb)类文件中更改用户名和密码。