SqlDataSource.Inserted-Ereignis
Assembly: System.Web (in system.web.dll)
Nachdem ein Einfügevorgang abgeschlossen wurde, können Sie das Inserted-Ereignis behandeln, um die Werte der Ausgabeparameter zu untersuchen. Die Ausgabeparameter sind aus dem SqlDataSourceStatusEventArgs-Objekt verfügbar, das dem Ereignis zugeordnet ist.
Weitere Informationen zum Behandeln von Ereignissen finden Sie unter Behandeln von Ereignissen.
Im folgenden Codebeispiel wird veranschaulicht, wie Daten aus Microsoft SQL Server abgerufen und in einem GridView-Steuerelement angezeigt werden. Außerdem wird veranschaulicht, wie ein DetailsView-Steuerelement zur Anzeige von Details für eine ausgewählte Zeile in der GridView und als Formular zum Einfügen neuer Datensätze verwendet wird.
Hinweis: |
|---|
| Wenn Sie nicht mit den Datenzugriffsfeatures in ASP.NET 2.0 vertraut sind, sollten Sie vor dem Fortfahren einige der folgenden Themen lesen: |
Die Daten werden zunächst im GridView-Steuerelement angezeigt, die ausgewählte Zeile der GridView wird außerdem im DetailsView-Steuerelement angezeigt. Das GridView-Steuerelement und das DetailsView-Steuerelement verwenden verschiedene Datenquellen-Steuerelemente. Das der DetailsView zugeordnete Steuerelement verfügt über die FilterExpression-Eigenschaft und die FilterParameters-Eigenschaft, womit sichergestellt wird, dass die ausgewählte Zeile der GridView angezeigt wird.
Wenn Sie im DetailsView-Steuerelement auf die automatisch generierte Schaltfläche Einfügen klicken, zeigt die DetailsView eine andere Benutzeroberfläche an, die zum Einfügen eines neuen Datensatzes verwendet wird. Das Beispiel verwendet eine gespeicherte Prozedur zum Einfügen der Datensätze und gibt den Primärschlüssel der eingefügten Zeile zurück. Wenn Sie einen Datensatz einfügen, füllt die DetailsView die InsertParameters-Auflistung automatisch mit Werten der gebundenen Spalten und ruft die Insert-Methode auf. Die DetailsView kann die korrekten Parameter aus jedem BoundField-Objekt sowie einen Parameter für das TemplateField-Objekt ableiten, wenn die bidirektionale ASP.NET Datenbindungssyntax verwendet wird. In diesem Beispiel wird ein zusätzlicher Parameter im OnInserting-Ereignishandler hinzugefügt, um den von der gespeicherten Prozedur zurückgegebenen Primärschlüssel zu behandeln.
Nachdem die Daten vom DetailsView-Steuerelement in die Datenbank eingefügt wurden, wird der OnInserted-Ereignishandler aufgerufen, um das Inserted-Ereignis zu behandeln. Außerdem wird der Wert des Primärschlüssels der eingefügten Zeile angezeigt und die DataBind-Methode des GridView-Steuerelements wird explizit aufgerufen, um die Daten zu aktualisieren.
<%@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>
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.Referenz
SqlDataSource-KlasseSqlDataSource-Member
System.Web.UI.WebControls-Namespace
Inserting
OnInserted
Insert
SqlDataSource.InsertParameters-Eigenschaft
Weitere Ressourcen
Überblick über den ASP.NET-DatenzugriffNeues beim ASP.NET-Datenzugriff
Datengebundene Webserver-Steuerelemente
SqlDataSource-Webserver-Steuerelement
Übersicht über den Lebenszyklus von ASP.NET-Seiten
Hinweis: