SqlDataSourceView.OnInserting(SqlDataSourceCommandEventArgs) Methode

Definition

Löst das Inserting-Ereignis aus, bevor das SqlDataSource-Steuerelement einen Einfügevorgang startet.Raises the Inserting event before the SqlDataSource control attempts an insert operation.

protected:
 virtual void OnInserting(System::Web::UI::WebControls::SqlDataSourceCommandEventArgs ^ e);
protected virtual void OnInserting (System.Web.UI.WebControls.SqlDataSourceCommandEventArgs e);
abstract member OnInserting : System.Web.UI.WebControls.SqlDataSourceCommandEventArgs -> unit
override this.OnInserting : System.Web.UI.WebControls.SqlDataSourceCommandEventArgs -> unit
Protected Overridable Sub OnInserting (e As SqlDataSourceCommandEventArgs)

Parameter

e
SqlDataSourceCommandEventArgs

Ein SqlDataSourceCommandEventArgs, das die Ereignisdaten enthält.A SqlDataSourceCommandEventArgs that contains the event data.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie Daten aus Microsoft SQL Server abrufen, in einem GridView Steuerelement anzeigen und ein DetailsView-Steuerelement verwenden, um die Details einer ausgewählten Zeile in der GridView und als Formular zum Einfügen neuer Datensätze anzuzeigen.The following code example demonstrates how to retrieve data from Microsoft SQL Server, display it in a GridView control, and use a DetailsView control to see details of a selected row in the GridView and as a form to insert new records.

Zunächst werden die Daten im GridView-Steuerelement angezeigt, und die ausgewählte Zeile der GridView wird auch im DetailsView-Steuerelement angezeigt.Initially, the data is displayed in the GridView control and the selected row of the GridView is also displayed in the DetailsView control. Die Steuerelemente GridView und DetailsView verwenden unterschiedliche Datenquellen Steuerelemente. das, das dem DetailsView zugeordnet ist, verfügt über die Eigenschaften FilterExpression und FilterParameters, die sicherstellen, dass die ausgewählte Zeile der GridView angezeigt wird.The GridView and DetailsView controls use different data source controls; the one that is associated with the DetailsView has the FilterExpression and FilterParameters properties, which ensure that the selected row of the GridView is displayed.

Wenn Sie auf die automatisch generierte Schaltfläche Einfügen des DetailsView-Steuer Elements klicken, zeigt die DetailsView eine andere Benutzeroberfläche an, die zum Einfügen eines neuen Datensatzes verwendet wird.If you click the automatically generated Insert button of the DetailsView control, the DetailsView shows a different user interface, which is used to insert a new record. Im Beispiel wird eine gespeicherte Prozedur verwendet, um Datensätze einzufügen, und gibt den Primärschlüssel der eingefügten Zeile zurück.The example uses a stored procedure to insert records and returns the primary key of the inserted row. Wenn Sie einen Datensatz einfügen, füllt der DetailsView automatisch die InsertParameters Auflistung mit Werten aus den gebundenen Spalten auf und ruft die Insert-Methode auf.If you insert a record, the DetailsView automatically populates the InsertParameters collection with values from the bound columns and calls the Insert method. Der DetailsView kann die richtigen Parameter aus jedem BoundField Objekt und einen Parameter für das TemplateField Objekt ableiten, wenn die ASP.net-bidirektionale Daten Bindungs Syntax verwendet wird.The DetailsView can infer the correct parameters from any BoundField object and a parameter for the TemplateField object when the ASP.NET two-way data-binding syntax is used. In diesem Beispiel wird ein zusätzlicher Parameter im OnInserting-Ereignishandler hinzugefügt, um den Primärschlüssel zu verarbeiten, der von der gespeicherten Prozedur zurückgegeben wird.In this example, an additional parameter is added in the OnInserting event handler to handle the primary key that is returned by the stored procedure.

Nachdem die Daten vom DetailsView-Steuerelement in die Datenbank eingefügt wurden, wird der OnInserted-Ereignishandler aufgerufen, um das Inserted-Ereignis zu behandeln. der Wert des Primärschlüssels der eingefügten Zeile wird angezeigt, und die DataBind-Methode des GridView-Steuer Elements wird explizit aufgerufen, um die Daten zu aktualisieren.Finally, after data is inserted by the DetailsView control into the database, the OnInserted event handler is called to handle the Inserted event, the value of the primary key of the inserted row is displayed, and the DataBind method of the GridView control is called explicitly to refresh the data.

<%@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="VB" %>
<%@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">

 Sub On_Inserting(ByVal sender As Object, ByVal e As SqlDataSourceCommandEventArgs)

    Dim insertedKey As SqlParameter  
    insertedKey = New SqlParameter("@PK_New", SqlDbType.Int)
    insertedKey.Direction    = ParameterDirection.Output     
    
    e.Command.Parameters.Add(insertedKey)

 End Sub 'On_Inserting

 Sub On_Inserted(ByVal sender As Object, ByVal e As SqlDataSourceStatusEventArgs)
    Dim command As DbCommand 
    command = e.Command
    
    ' The label displays the primary key of the recently inserted row.
    Label1.Text = command.Parameters("@PK_New").Value.ToString()    
    
    ' Explicitly call DataBind to refresh the data
    ' and show the newly inserted row.
    GridView1.DataBind()
 End Sub '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"        
        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>

Hinweise

Durch das Auslösen eines Ereignisses wird der Ereignishandler über einen Delegaten aufgerufen.Raising an event invokes the event handler through a delegate. Weitere Informationen zum Behandeln von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.For more information about how to handle events, see Handling and Raising Events.

Mit der OnInserting-Methode können auch abgeleitete Klassen das Ereignis ohne Anfügen eines Delegaten behandeln.The OnInserting method also allows derived classes to handle the event without attaching a delegate. Dies ist das bevorzugte Verfahren für die Behandlung des Ereignisses in einer abgeleiteten Klasse.This is the preferred technique for handling the event in a derived class.

Hinweise für Vererber

Wenn Sie die OnInserting(SqlDataSourceCommandEventArgs) Methode in einer abgeleiteten Klasse überschreiben, stellen Sie sicher, dass Sie die OnInserting(SqlDataSourceCommandEventArgs)-Methode für die Basisklasse aufzurufen, damit registrierte Delegaten das Ereignis empfangen.When overriding the OnInserting(SqlDataSourceCommandEventArgs) method in a derived class, be sure to call the OnInserting(SqlDataSourceCommandEventArgs) method for the base class so that registered delegates receive the event.

Gilt für: