SqlDataSourceCommandEventHandler-Delegat
Assembly: System.Web (in system.web.dll)
public delegate void SqlDataSourceCommandEventHandler ( Object sender, SqlDataSourceCommandEventArgs e )
/** @delegate */ public delegate void SqlDataSourceCommandEventHandler ( Object sender, SqlDataSourceCommandEventArgs e )
Nicht zutreffend.
Parameter
- sender
Die Quelle des Ereignisses: das SqlDataSource-Steuerelement.
- e
Eine Instanz von SqlDataSourceCommandEventArgs, die die Ereignisdaten enthält.
Beim Erstellen eines SqlDataSourceCommandEventHandler-Delegaten bestimmen Sie die Methode für die Ereignisbehandlung. Sie können dem Ereignishandler das Ereignis zuordnen, indem Sie dem Ereignis eine Instanz des Delegaten hinzufügen. Der Ereignishandler wird bei jedem Eintreten des Ereignisses aufgerufen, sofern der Delegat nicht entfernt wird. Weitere Informationen zu Ereignishandlerdelegaten finden Sie unter Behandeln von Ereignissen.
Im folgenden Codebeispiel wird das Behandeln des Inserting-Ereignisses zum Ausführen von Vorverarbeitungsschritten veranschaulicht, z. B. Hinzufügen eines Parameters zum DbCommand-Objekt, das in SqlDataSourceCommandEventArgs enthalten ist, um den Wert eines Ausgabeparameters aufzuzeichnen, bevor eine Datenbankaktion ausgeführt wird. In diesem Beispiel wird unter Verwendung einer gespeicherten Prozedur mithilfe eines DetailsView-Steuerelements in einem klassischen Master-Detail-Szenario eine Einfügung vorgenommen. Der Wert des Ausgabeparameters, der den Primärschlüssel einer neu eingefügten Zeile darstellt, wird beim Auslösen des Inserted-Ereignisses nach Abschluss des Vorgangs überprüft.
<%@Page Language="C#" %> <%@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) { SqlParameter insertedKey = new SqlParameter("@PK_New", SqlDbType.Int); insertedKey.Direction = ParameterDirection.Output; e.Command.Parameters.Add(insertedKey); } private void On_Inserted(Object sender, SqlDataSourceStatusEventArgs e) { DbCommand command = e.Command; // The label displays the primary key of the recently inserted row. Label1.Text = command.Parameters["@PK_New"].Value.ToString(); // Force a refresh after the data is inserted. GridView1.DataBind(); } </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" 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="<%$ ConnectionStrings:MyNorthwind %>" 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 id="TitleDropDownList" runat="server" selectedvalue="<%# Bind('Title') %>" > <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="<%$ ConnectionStrings:MyNorthwind%>" SelectCommand="SELECT * FROM Employees" InsertCommandType = "StoredProcedure" InsertCommand="sp_insertemployee" OnInserting="On_Inserting" OnInserted ="On_Inserted" FilterExpression="EmployeeID={0}"> <FilterParameters> <asp:ControlParameter Name="EmployeeID" ControlId="GridView1" PropertyName="SelectedValue" /> </FilterParameters> </asp:SqlDataSource> <!-- -- An example sp_insertemployee stored procedure that returns -- the primary key of the row that was inserted in an OUT parameter. CREATE PROCEDURE sp_insertemployee @FirstName nvarchar(10), @LastName nvarchar(20) , @Title nvarchar(30), @Notes nvarchar(200), @PK_New int OUTPUT AS INSERT INTO Employees(FirstName,LastName,Title,Notes)VALUES (@FirstName,@LastName,@Title,@Notes) SELECT @PK_New = @@IDENTITY RETURN (1) GO --> <asp:Label id="Label1" runat="server" /> </form> </body> </html>
<%@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>
Im folgenden Codebeispiel wird veranschaulicht, wie das vom GridView-Steuerelement ausgelöste RowUpdating-Ereignis so behandelt wird, dass eventuell eine Datenbankaktion abgebrochen wird, die durch ein dem GridView-Steuerelement zugeordneten SqlDataSource-Steuerelement ausgeführt wird.
<%@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"> // 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.OldValues[0].Equals("Nancy")) { e.Cancel = true; Label1.Text="This Row is Not Updatable!"; } } // Ensure any helper text is cleared. private void OnRowCancellingHandler(Object source, GridViewCancelEditEventArgs e) { Label1.Text=""; } </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="<%$ ConnectionStrings:MyNorthwind%>" 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>
<%@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>
Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
Microsoft .NET Framework 3.0 wird unter Windows Vista, Microsoft Windows XP SP2 und Windows Server 2003 SP1 unterstützt.