GridView.RowDeleting Событие
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Происходит при щелчке кнопки "Удалить" в строке, до удаления строки элементом управления GridView.
public:
event System::Web::UI::WebControls::GridViewDeleteEventHandler ^ RowDeleting;
public event System.Web.UI.WebControls.GridViewDeleteEventHandler RowDeleting;
member this.RowDeleting : System.Web.UI.WebControls.GridViewDeleteEventHandler
Public Custom Event RowDeleting As GridViewDeleteEventHandler
Тип события
Примеры
В следующем примере показано, как использовать RowDeleting событие для отмены операции удаления. Страница содержит GridView элемент управления, который отображает список имен клиентов и адресов из базы данных AdventureWorksLT. Когда пользователь щелкает ссылку Удалить для строки, обработчик RowDeleting события проверяет фамилию человека, отображаемого в строке, которую пользователь пытается удалить. Если фамилия — Beaver, операция удаления отменяется и отображается сообщение об ошибке. Для любого другого имени операция удаления продолжается, а строка удаляется.
Обработчик событий использует RowIndex свойство GridViewDeleteEventArgs объекта для поиска строки, которую пользователь пытается удалить. В примере проверяется содержимое Rows коллекции. Если значение, с которым вы хотите сравнить, является значением ключа, можно изучить коллекцию DataKeys .
Для простоты примера строки удаляются из таблицы CustomerAddress, а не из таблицы Customer. Элемент GridView управления показывает результат объединения трех таблиц: Customer, Address и CustomerAddress. При удалении строки CustomerAddress соответствующая GridView строка исчезает. Ограничения целостности данных усложняют код для примера, который фактически удаляет строки из таблицы Customer.
Сведения о настройке базы данных AdventureWorksLT см. в статье How to: Set Up an AdventureWorksLT Sample Database for ASP.NET Development.
<%@ 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>
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Private Sub CustomersGridView_RowDeleting _
(ByVal sender As [Object], _
ByVal e As GridViewDeleteEventArgs)
Dim cell As TableCell
cell = CustomersGridView.Rows(e.RowIndex).Cells(2)
If cell.Text = "Beaver" Then
e.Cancel = True
Message.Text = "You cannot delete customer Beaver."
Else
Message.Text = ""
End If
End Sub
</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 передается методу обработки событий, который позволяет определить индекс текущей строки и указать, что операция удаления должна быть отменена. Чтобы отменить операцию удаления, присвойте свойству CancelGridViewDeleteEventArgs объекта значение true
. При необходимости можно управлять коллекциями Keys и Values перед передачей значений в источник данных.
Дополнительные сведения об обработке событий см. в разделе Обработка и вызов событий.