Erweitern Minimieren
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

SqlDataSourceCommandEventHandler-Delegat

Stellt die Methode dar, die die Ereignisse Updating, Inserting und Deleting des SqlDataSource-Steuerelements behandelt.

Namespace: System.Web.UI.WebControls
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.

.NET Framework

Unterstützt in: 3.0, 2.0
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
© 2013 Microsoft. Alle Rechte vorbehalten.