SqlDataSourceCommandEventHandler Delegate
Assembly: System.Web (in system.web.dll)
public delegate void SqlDataSourceCommandEventHandler ( Object^ sender, SqlDataSourceCommandEventArgs^ e )
/** @delegate */ public delegate void SqlDataSourceCommandEventHandler ( Object sender, SqlDataSourceCommandEventArgs e )
Not applicable.
Parameters
- sender
The source of the event, the SqlDataSource control.
- e
A SqlDataSourceCommandEventArgs that contains the event data.
When you create a SqlDataSourceCommandEventHandler delegate, you identify the method that will handle the event. To associate the event with your event handler, add an instance of the delegate to the event. The event handler is called whenever the event occurs, unless you remove the delegate. For more information about event handler delegates, see Consuming Events.
The following code example demonstrates how to handle the Inserting event to perform any preprocessing steps, such as adding a parameter to the DbCommand object contained by the SqlDataSourceCommandEventArgs to capture the value of an output parameter, before a database action is performed. In this example an insert is performed by a DetailsView control in a classic master-detail scenario, using a stored procedure. The value of the output parameter, which represents the primary key of the newly inserted row, is examined when the Inserted event is raised after the operation completes.
<%@Page Language="VJ#" %>
<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Data.Common" %>
<%@Import Namespace="System.Data.SqlClient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
private void On_Inserting(Object sender, SqlDataSourceCommandEventArgs e)
{
// Add the Title parameter from the TemplatedField.
// Cast the first Item of the DetailsView to a Table.
Table tbl = (Table)DetailsView1.get_Controls().get_Item(0);
// Get row two (the third row) from the rows collection.
// This is the row that the DropDownList is in.
TableRowCollection rows = tbl.get_Rows();
TableRow titleRow = rows.get_Item(2);
// Cast the second item in the controls collection of cell one as a
// DropDownList.
DropDownList title = (DropDownList)titleRow.get_Cells().get_Item(1).
get_Controls().get_Item(1);
SqlParameter titleParam = new SqlParameter(
"@Title", title.get_SelectedValue());
e.get_Command().get_Parameters().Add(titleParam);
} //On_Inserting
private void On_Inserted(Object sender, SqlDataSourceStatusEventArgs e)
{
// Explicitly call DataBind to refresh the data
// and show the newly inserted row.
GridView1.DataBind();
} //On_Inserted
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView
id="GridView1"
runat="server"
AutoGenerateColumns="False"
DataKeyNames="EmployeeID"
SelectedIndex="0"
DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField HeaderText="First Name" DataField="FirstName" />
<asp:BoundField HeaderText="Last Name" DataField="LastName" />
<asp:BoundField HeaderText="Title" DataField="Title" />
<asp:ButtonField ButtonType="Link" CommandName="Select" Text="Details..." />
</Columns>
</asp:GridView>
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
</asp:SqlDataSource>
<hr />
<asp:DetailsView
id="DetailsView1"
runat="server"
DataSourceID="SqlDataSource2"
AutoGenerateRows="False"
AutoGenerateInsertButton="True">
<Fields>
<asp:BoundField HeaderText="First Name" DataField="FirstName" ReadOnly="False"/>
<asp:BoundField HeaderText="Last Name" DataField="LastName" ReadOnly="False"/>
<asp:TemplateField HeaderText="Title">
<ItemTemplate>
<asp:DropDownList
runat="server">
<asp:ListItem Selected="True">Sales Representative</asp:ListItem>
<asp:ListItem>Sales Manager</asp:ListItem>
<asp:ListItem>Vice President, Sales</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Notes" DataField="Notes" ReadOnly="False"/>
</Fields>
</asp:DetailsView>
<asp:SqlDataSource
id="SqlDataSource2"
runat="server"
ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
SelectCommand="SELECT * FROM Employees"
InsertCommand="INSERT INTO Employees(FirstName,LastName,Title,Notes)VALUES (@FirstName,@LastName,@Title,@Notes)"
OnInserting="On_Inserting"
OnInserted="On_Inserted"
FilterExpression="EmployeeID=@EmployeeID">
<FilterParameters>
<asp:ControlParameter Name="EmployeeID" ControlId="GridView1" PropertyName="SelectedDataKey.Value"/>
</FilterParameters>
</asp:SqlDataSource>
</form>
</body>
</html>
The following code example demonstrates how to handle the RowUpdating event raised by the GridView control, to possibly cancel a database action performed by a SqlDataSource control associated with the GridView control.
<%@Page Language="VJ#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// Set helper text and cancel the update if the values submitted to update
// the row do not meet requirements.
private void OnRowUpdatingHandler(Object source, GridViewUpdateEventArgs e)
{
// You can examine the values submitted by the user and perform
// additional processing as required.
if (e.get_OldValues().get_Item(0).Equals("Nancy")) {
e.set_Cancel(true);
Label1.set_Text("This Row is Not Updatable!");
}
} //OnRowUpdatingHandler
// Ensure any helper text is cleared.
private void OnRowCancellingHandler(Object source,
GridViewCancelEditEventArgs e)
{
Label1.set_Text("");
} //OnRowCancellingHandler
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ASP.NET Example</title>
</head>
<body>
<form id="form1" runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataSet"
ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees"
UpdateCommand="Update Employees SET FirstName=@FirstName,LastName=@LastName,Title=@Title WHERE EmployeeID=@EmployeeID">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
AutoGenerateColumns="False"
DataKeyNames="EmployeeID"
AutoGenerateEditButton="True"
DataSourceID="SqlDataSource1"
OnRowUpdating="OnRowUpdatingHandler"
OnRowCancelingEdit="OnRowCancellingHandler">
<Columns>
<asp:BoundField HeaderText="First Name" DataField="FirstName" />
<asp:BoundField HeaderText="Last Name" DataField="LastName" />
<asp:BoundField HeaderText="Title" DataField="Title" />
</Columns>
</asp:GridView>
<asp:Label
id="Label1"
runat="server">
</asp:Label>
</form>
</body>
</html>