SqlDataSource.Inserting Ereignis

Definition

Tritt vor einem Einfügevorgang ein.Occurs before an insert operation.

public:
 event System::Web::UI::WebControls::SqlDataSourceCommandEventHandler ^ Inserting;
public event System.Web.UI.WebControls.SqlDataSourceCommandEventHandler Inserting;
member this.Inserting : System.Web.UI.WebControls.SqlDataSourceCommandEventHandler 
Public Custom Event Inserting As SqlDataSourceCommandEventHandler 

Beispiele

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

Hinweis

In diesem Beispiel wird gezeigt, wie die deklarative Syntax für den Datenzugriff verwendet wird.This example shows how to use declarative syntax for data access. Informationen zum Zugreifen auf Daten mithilfe von Code anstelle von Markup finden Sie unter zugreifen auf Daten in Visual Studio.For information about how to access data by using code instead of markup, see Accessing data in Visual Studio.

Zunächst werden die Daten im GridView -Steuerelement angezeigt, und die ausgewählte Zeile GridView des DetailsView wird ebenfalls im-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. Das GridView - DetailsView Steuerelement und das-Steuerelement verwenden unterschiedliche Datenquellen GridView -Steuer DetailsView Elemente; das FilterParameters , das dem zugeordnet ist, verfügt über die FilterExpression -und-Eigenschaften, die sicherstellen, dass die ausgewählte gestellte.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 ensures that the selected row of the GridView is displayed.

Wenn Sie auf die automatisch generierte Schaltfläche Einfügen des DetailsView -Steuer Elements DetailsView klicken, wird eine andere Benutzeroberfläche angezeigt, 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, DetailsView füllt InsertParameters die Auflistung automatisch 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 von einem beliebigen BoundField -Objekt und einen Parameter für die TemplateField 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 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 DetailsView die Daten vom-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 DataBind , und die-Methode des GridView das Steuerelement wird explizit aufgerufen, um die Daten zu aktualisieren.Finally, after data is inserted into the database by the DetailsView control, 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

Behandeln Sie Inserting das-Ereignis, um zusätzliche Initialisierungs Vorgänge auszuführen, die für Ihre Anwendung spezifisch sind, um die Werte von Parametern zu überprüfen oder um SqlDataSource die Parameterwerte zu ändern, bevor das-Steuerelement den Einfügevorgang ausführt.Handle the Inserting event to perform additional initialization operations that are specific to your application, to validate the values of parameters, or to change the parameter values before the SqlDataSource control performs the insert operation. Die Verbindung mit der zugrunde liegenden Datenquelle ist noch nicht geöffnet, wenn der Ereignishandlerdelegat aufgerufen wird.The connection to the underlying data source is not yet open when the event handler delegate is called. Daher können Sie den Vorgang nicht direkt abbrechen, indem Sie Cancel die-Methode DbCommand für das-Objekt aufrufen, SqlDataSourceCommandEventArgs das von der-Eigenschaft verfügbar gemacht wird.Therefore, you cannot cancel the operation directly by calling the Cancel method on the DbCommand object that is exposed by the SqlDataSourceCommandEventArgs property. Sie können den Daten Bank Vorgang jedoch abbrechen, indem Sie die Cancel -Eigenschaft SqlDataSourceCommandEventArgs des-Objekts trueauf festlegen.You can, however, cancel the database operation by setting the Cancel property of the SqlDataSourceCommandEventArgs object to true.

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.

Gilt für:

Siehe auch