GridView.RowDeleting 事件

定义

在单击某一行的“删除”按钮时,但在 GridView 控件删除该行之前发生。

C#
public event System.Web.UI.WebControls.GridViewDeleteEventHandler RowDeleting;

事件类型

示例

以下示例演示如何使用 RowDeleting 事件取消删除操作。 该页包含一个 GridView 控件,该控件显示 AdventureWorksLT 数据库中的客户名称和地址列表。 当用户单击某行的 “删除” 链接时,事件的处理程序 RowDeleting 将检查用户尝试删除的行中显示的人员的姓氏。 如果姓氏为“Beaver”,则取消删除操作并显示错误消息。 对于任何其他名称,删除操作将继续,并且删除该行。

事件处理程序使用 RowIndex 对象的 属性 GridViewDeleteEventArgs 来查找用户尝试删除的行。 该示例检查集合的内容 Rows 。 如果要比较的值是键值,可以改为检查 DataKeys 集合。

从 CustomerAddress 表(而不是 Customer 表)中删除行,以便使示例保持简单。 控件 GridView 显示联接三个表的结果:Customer、Address 和 CustomerAddress。 删除 CustomerAddress 行时,相应的 GridView 行将消失。 引用完整性约束会使实际从 Customer 表中删除行的示例的代码更加复杂。

有关如何设置 AdventureWorksLT 数据库的信息,请参阅 如何:为 ASP.NET 开发设置 AdventureWorksLT 示例数据库

ASP.NET (C#)

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    void CustomersGridView_RowDeleting
        (Object sender, GridViewDeleteEventArgs e)
    {
        TableCell cell = CustomersGridView.Rows[e.RowIndex].Cells[2];
        if (cell.Text == "Beaver")
        {
            e.Cancel = true;
            Message.Text = "You cannot delete customer Beaver.";
        }
        else
        {
            Message.Text = "";
        }
    }  

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>GridView RowDeleting Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <h3>
        GridView RowDeleting Example
    </h3>
    <asp:Label ID="Message" ForeColor="Red" runat="server" />
    <br />
    <asp:GridView ID="CustomersGridView" runat="server" 
        DataSourceID="CustomersSqlDataSource" 
        AutoGenerateColumns="False"
        AutoGenerateDeleteButton="True" 
        OnRowDeleting="CustomersGridView_RowDeleting"
        DataKeyNames="CustomerID,AddressID">
        <Columns>
            <asp:BoundField DataField="FirstName" 
                HeaderText="FirstName" SortExpression="FirstName" />
            <asp:BoundField DataField="LastName" HeaderText="LastName" 
                SortExpression="LastName" />
            <asp:BoundField DataField="City" HeaderText="City" 
                SortExpression="City" />
            <asp:BoundField DataField="StateProvince" HeaderText="State" 
                SortExpression="StateProvince" />
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="CustomersSqlDataSource" runat="server"
        SelectCommand="SELECT SalesLT.CustomerAddress.CustomerID, 
            SalesLT.CustomerAddress.AddressID, 
            SalesLT.Customer.FirstName, 
            SalesLT.Customer.LastName, 
            SalesLT.Address.City, 
            SalesLT.Address.StateProvince 
            FROM SalesLT.Customer 
            INNER JOIN SalesLT.CustomerAddress 
            ON SalesLT.Customer.CustomerID = 
                SalesLT.CustomerAddress.CustomerID 
            INNER JOIN SalesLT.Address ON SalesLT.CustomerAddress.AddressID = 
                SalesLT.Address.AddressID"
        DeleteCommand="Delete from SalesLT.CustomerAddress where CustomerID = 
            @CustomerID and AddressID = @AddressID" 
        ConnectionString="<%$ ConnectionStrings:AdventureWorksLTConnectionString %>">
        <DeleteParameters>
            <asp:Parameter Name="AddressID" />
            <asp:Parameter Name="CustomerID" />
        </DeleteParameters>
    </asp:SqlDataSource>
    </form>
</body>
</html>

注解

RowDeleting 单击行的“删除”按钮时,但在控件删除该行之前,将 GridView 引发 该事件。 这使你能够提供一个事件处理方法,该方法在发生此事件时执行自定义例程,例如取消删除操作。

对象 GridViewDeleteEventArgs 将传递给事件处理方法,该方法使你能够确定当前行的索引并指示应取消删除操作。 若要取消删除操作,请将 对象的 属性GridViewDeleteEventArgs设置为 Canceltrue。 如有必要, Keys 还可以在值传递到数据源之前操作 和 Values 集合。

有关如何处理事件的详细信息,请参阅 处理和引发事件

适用于

产品 版本
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

另请参阅