SqlDataSourceView.OnInserting メソッド
アセンブリ: System.Web (system.web.dll 内)

Dim e As SqlDataSourceCommandEventArgs Me.OnInserting(e)

イベントが発生すると、デリゲートを使用してイベント ハンドラが呼び出されます。詳細については、「イベントの利用」を参照してください。
OnInserting メソッドを使用すると、デリゲートを結び付けずに、派生クラスでイベントを処理することもできます。派生クラスでイベントを処理する場合は、この手法をお勧めします。
継承時の注意 派生クラスで OnInserting メソッドをオーバーライドする場合は、登録されているデリゲートがイベントを受け取ることができるように、基本クラスの OnInserting メソッドを呼び出してください。
Microsoft SQL Server からデータを取得して GridView コントロールに表示し、GridView で選択した行の詳細情報を表示したり、新しいレコードを挿入するためのフォームとして DetailsView コントロールを使用する方法を次のコード例に示します。
まずデータが GridView コントロールに表示され、さらに、GridView の選択行が DetailsView コントロールに表示されます。GridView コントロールおよび DetailsView コントロールは、異なるデータ ソース コントロールを使用します。DetailsView に関連付けられたコントロールは、GridView の選択行が確実に表示されるようにする FilterExpression プロパティおよび FilterParameters プロパティを持ちます。
DetailsView コントロールの自動的に生成された [挿入] ボタンをクリックすると、DetailsView は、新しいレコードの挿入に使用する別のユーザー インターフェイスを表示します。この例では、ストアド プロシージャを使用してレコードを挿入し、挿入された行の主キーを返します。レコードを挿入すると、DetailsView は、バインドされた列の値を自動的に InsertParameters コレクションに入力し、Insert メソッドを呼び出します。DetailsView では、BoundField オブジェクトから正しいパラメータが推測されます。また、ASP.NET の双方向データ バインディング構文が使用されている場合は、TemplateField オブジェクトのパラメータが推測されます。この例では、ストアド プロシージャで返される主キーを処理するために OnInserting イベント ハンドラにパラメータが追加されます。
最後に、DetailsView コントロールによってデータベースにデータが挿入された後で、Inserted イベントを処理する OnInserted イベント ハンドラが呼び出され、挿入された行の主キーの値が表示され、データを更新する GridView コントロールの DataBind メソッドが明示的に呼び出されます。
<%@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> <BODY> <FORM 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>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="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> <BODY> <FORM 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>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> <BODY> <FORM 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>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 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- SqlDataSourceView.OnInserting メソッドのページへのリンク