ObjectDataSourceMethodEventArgs ObjectDataSourceMethodEventArgs ObjectDataSourceMethodEventArgs ObjectDataSourceMethodEventArgs Class

定義

Inserting コントロールの Updating イベント、Deleting イベント、および ObjectDataSource イベントのデータを提供します。Provides data for the Inserting, Updating, and Deleting events of the ObjectDataSource control.

public ref class ObjectDataSourceMethodEventArgs : System::ComponentModel::CancelEventArgs
public class ObjectDataSourceMethodEventArgs : System.ComponentModel.CancelEventArgs
type ObjectDataSourceMethodEventArgs = class
    inherit CancelEventArgs
Public Class ObjectDataSourceMethodEventArgs
Inherits CancelEventArgs
継承
ObjectDataSourceMethodEventArgsObjectDataSourceMethodEventArgsObjectDataSourceMethodEventArgsObjectDataSourceMethodEventArgs
派生

このセクションには、2 つのコード例が含まれています。This section contains two code examples. 最初のコード例では、ビジネスオブジェクトObjectDataSource DetailsViewとコントロールを使用してデータを挿入する方法を示します。The first code example demonstrates how to use an ObjectDataSource control with a business object and a DetailsView control to insert data. 2番目のコード例では、最初のコード例で使用される中間層ビジネスオブジェクトの例を示します。The second code example provides an example middle-tier business object that is used by the first code example.

ビジネスオブジェクトObjectDataSource DetailsViewとコントロールを使用してデータを挿入する方法を次のコード例に示します。The following code example demonstrates how to use an ObjectDataSource control with a business object and a DetailsView control to insert data. DetailsViewは、最初にNorthwindEmployee 、自動的に生成された挿入ボタンと共に新しいレコードが表示されます。The DetailsView initially displays a new NorthwindEmployee record, along with an automatically generated Insert button. DetailsViewコントロールのフィールドにデータを入力した後、[挿入 InsertMethod ] ボタンをクリックすると、 Insertアクションを実行するメソッドがプロパティによって識別されます。After you enter data into the fields of the DetailsView control, click the Insert button, and the InsertMethod property will identify which method performs the Insert action.

この例では、 UpdateEmployeeInfoメソッドを使用して挿入を実行します。ただし、 NorthwindEmployeeデータを挿入するにはパラメーターが必要です。In this example, the UpdateEmployeeInfo method is used to perform an insert; however, it requires a NorthwindEmployee parameter to insert the data. このため、 DetailsViewコントロールが自動的に渡す文字列のコレクションは十分ではありません。For this reason, the collection of strings that the DetailsView control passes automatically is not sufficient. デリゲートは、 Insertingイベントを処理し、 Insert操作を続行する前に入力パラメーターを操作できるようにするオブジェクトです。ObjectDataSourceMethodEventHandler NorthwindEmployeeInsertingThe NorthwindEmployeeInserting delegate is an ObjectDataSourceMethodEventHandler object that handles the Inserting event and enables you to manipulate the input parameters before the Insert operation proceeds. メソッドでは、パラメーター NorthwindEmployeeとしてオブジェクトが必要であるため、1つは文字列のコレクションを使用InputParametersして作成され、コレクションに追加されます。 UpdateEmployeeInfoBecause the UpdateEmployeeInfo method requires a NorthwindEmployee object as a parameter, one is created using the collection of strings and is added to the InputParameters collection.

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Import namespace="Samples.AspNet.CS" %>
<%@ 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">
private void NorthwindEmployeeInserting(object source, ObjectDataSourceMethodEventArgs e)
{
  // The business object expects a custom type. Build it
  // and add it to the parameters collection.
  
  IDictionary paramsFromPage = e.InputParameters;

  NorthwindEmployee ne = new NorthwindEmployee();

  ne.FirstName  = paramsFromPage["FirstName"].ToString();
  ne.LastName   = paramsFromPage["LastName"].ToString();
  ne.Title      = paramsFromPage["Title"].ToString();
  ne.Courtesy   = paramsFromPage["Courtesy"].ToString();
  ne.Supervisor = Int32.Parse(paramsFromPage["Supervisor"].ToString());

  paramsFromPage.Clear();
  paramsFromPage.Add("ne", ne);
}

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:detailsview
          id="DetailsView1"
          runat="server"
          autogenerateinsertbutton="True"
          datasourceid="ObjectDataSource1">
        </asp:detailsview>

        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          selectmethod="GetEmployee"
          insertmethod="UpdateEmployeeInfo"
          oninserting="NorthwindEmployeeInserting"
          typename="Samples.AspNet.CS.EmployeeLogic"
          >
          <selectparameters>
            <asp:parameter name="anID" defaultvalue="-1" />
          </selectparameters>
        </asp:objectdatasource>

    </form>
  </body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="Samples.AspNet.VB" %>
<%@ Import namespace="Samples.AspNet.VB" %>
<%@ Page language="vb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Private Sub NorthwindEmployeeInserting(source As Object, e As ObjectDataSourceMethodEventArgs)

  ' The GridView control passes an array of strings in the parameters
  ' collection because that is the type it knows how to work with.
  ' However, the business object expects a custom type. Build it
  ' and add it to the parameters collection.
  Dim paramsFromPage As IDictionary = e.InputParameters

  Dim ne As New NorthwindEmployee()
  ne.FirstName  = paramsFromPage("FirstName").ToString()
  ne.LastName   = paramsFromPage("LastName").ToString()
  ne.Title      = paramsFromPage("Title").ToString()
  ne.Courtesy   = paramsFromPage("Courtesy").ToString()
  ne.Supervisor = Int32.Parse(paramsFromPage("Supervisor").ToString())
  
  paramsFromPage.Clear()
  paramsFromPage.Add("ne", ne)
End Sub ' NorthwindEmployeeInserting

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - VB Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:detailsview
          id="DetailsView1"
          runat="server"
          autogenerateinsertbutton="True"
          datasourceid="ObjectDataSource1">
        </asp:detailsview>

        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          selectmethod="GetEmployee"
          insertmethod="UpdateEmployeeInfo"
          oninserting="NorthwindEmployeeInserting"
          typename="Samples.AspNet.VB.EmployeeLogic" >
          <selectparameters>
            <asp:parameter name="anID" defaultvalue="-1" />
          </selectparameters>
        </asp:objectdatasource>

    </form>
  </body>
</html>

次のコード例では、前のコード例で使用している中間層ビジネスオブジェクトの例を示します。The following code example provides an example middle-tier business object that the preceding code example uses. 次の一覧では、コード例で定義されている2つの主要なクラスについて説明します。The following list describes the two major classes that are defined in the code example:

  • EmployeeLogicクラス。ビジネスロジックをカプセル化するステートレスクラスです。The EmployeeLogic class, which is a stateless class that encapsulates business logic.

  • NorthwindEmployeeクラス。これは、データ層からデータを読み込み、永続化するために必要な基本機能のみを含むモデルクラスです。The NorthwindEmployee class, which is a model class that contains only the basic functionality that is required to load and persist data from the data tier.

さらに、 NorthwindDataExceptionクラスが便宜的に提供されます。In addition, a NorthwindDataException class is provided as a convenience.

この一連のクラスは、Northwind Traders データベースを使用します。これは、Microsoft SQL Server および Microsoft Access で使用できるデータベースの例です。This set of example classes uses the Northwind Traders database, which is an example database available with Microsoft SQL Server and Microsoft Access. 完全な作業例を使用するには、これらのクラスを App_Code ディレクトリのアプリケーションルートの下に配置するか、コンパイルして、結果の DLL を Bin ディレクトリに配置します。For a complete working example, use these classes by placing them in the App_Code directory under the application root or by compiling them and placing the resulting DLL in the Bin directory. UpdateEmployeeInfoメソッドは完全には実装されていないため、この例を試してみると、Northwind Traders データベースにデータが挿入されません。The UpdateEmployeeInfo method is not completely implemented, so you will not insert data into the Northwind Traders database when you experiment with this example.

namespace Samples.AspNet.CS {

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
  //
  // EmployeeLogic is a stateless business object that encapsulates
  // the operations you can perform on a NorthwindEmployee object.
  //
  public class EmployeeLogic {

    // Returns a collection of NorthwindEmployee objects.
    public static ICollection GetAllEmployees () {
      ArrayList al = new ArrayList();

      ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["NorthwindConnection"];

      SqlDataSource sds
        = new SqlDataSource(cts.ConnectionString,
                            "SELECT EmployeeID FROM Employees");
      try {
        IEnumerable IDs = sds.Select(DataSourceSelectArguments.Empty);

        // Iterate through the Enumeration and create a
        // NorthwindEmployee object for each ID.
        IEnumerator enumerator = IDs.GetEnumerator();
        while (enumerator.MoveNext()) {
          // The IEnumerable contains DataRowView objects.
          DataRowView row = enumerator.Current as DataRowView;
          string id = row["EmployeeID"].ToString();
          NorthwindEmployee nwe = new NorthwindEmployee(id);
          // Add the NorthwindEmployee object to the collection.
          al.Add(nwe);
        }
      }
      finally {
        // If anything strange happens, clean up.
        sds.Dispose();
      }

      return al;
    }

    public static NorthwindEmployee GetEmployee(object anID) {
      if (anID.Equals("-1") ||
          anID.Equals(DBNull.Value) ) {
        return new NorthwindEmployee();
      }
      else {
        return new NorthwindEmployee(anID);
      }
    }

    public static void UpdateEmployeeInfo(NorthwindEmployee ne) {
      bool retval = ne.Save();
      if (! retval) { throw new NorthwindDataException("UpdateEmployee failed."); }
    }

    public static void DeleteEmployee(NorthwindEmployee ne) {
      bool retval = ne.Delete();
      if (! retval) { throw new NorthwindDataException("DeleteEmployee failed."); }
    }

    // And so on...
  }

  public class NorthwindEmployee {

    public NorthwindEmployee () {
      ID = DBNull.Value;
      lastName = "";
      firstName = "";
      title="";
      titleOfCourtesy = "";
      reportsTo = -1;
    }

    public NorthwindEmployee (object anID) {
      this.ID = anID;

      SqlConnection conn
        = new SqlConnection (ConfigurationManager.ConnectionStrings["NorthwindConnection"].ConnectionString);
      SqlCommand sc =
        new SqlCommand(" SELECT FirstName,LastName,Title,TitleOfCourtesy,ReportsTo " +
                       " FROM Employees " +
                       " WHERE EmployeeID = @empId",
                       conn);
      // Add the employee ID parameter and set its value.
      sc.Parameters.Add(new SqlParameter("@empId",SqlDbType.Int)).Value = Int32.Parse(anID.ToString());
      SqlDataReader sdr = null;

      try {
        conn.Open();
        sdr = sc.ExecuteReader();

        // Only loop once.
        if (sdr != null && sdr.Read()) {
          // The IEnumerable contains DataRowView objects.
          this.firstName        = sdr["FirstName"].ToString();
          this.lastName         = sdr["LastName"].ToString();
          this.title            = sdr["Title"].ToString();
          this.titleOfCourtesy  = sdr["TitleOfCourtesy"].ToString();
          if (! sdr.IsDBNull(4)) {
            this.reportsTo        = sdr.GetInt32(4);
          }
        }
        else {
          throw new NorthwindDataException("Data not loaded for employee id.");
        }
      }
      finally {
        try {
          if (sdr != null) sdr.Close();
          conn.Close();
        }
        catch (SqlException) {
          // Log an event in the Application Event Log.
          throw;
        }
      }
    }

    private object ID;
    public string EmpID {
      get { return ID.ToString();  }
    }

    private string lastName;
    public string LastName {
      get { return lastName; }
      set { lastName = value; }
    }

    private string firstName;
    public string FirstName {
      get { return firstName; }
      set { firstName = value;  }
    }

    public string FullName {
      get { return FirstName + " " + LastName; }
    }

    private string title;
    public String Title {
      get { return title; }
      set { title = value; }
    }

    private string titleOfCourtesy;
    public string Courtesy {
      get { return titleOfCourtesy; }
      set { titleOfCourtesy = value; }
    }

    private int    reportsTo;
    public int Supervisor {
      get { return reportsTo; }
      set { reportsTo = value; }
    }

    public bool Save () {
      // Implement persistence logic.
      return true;
    }

    public bool Delete () {
      // Implement delete logic.
      return true;
    }
  }

  internal class NorthwindDataException: Exception {
    public NorthwindDataException(string msg) : base (msg) { }
  }
}
Imports System.Collections
Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.UI
Imports System.Web.UI.WebControls

Namespace Samples.AspNet.VB

'
' EmployeeLogic is a stateless business object that encapsulates
' the operations you can perform on a NorthwindEmployee object.
'
Public Class EmployeeLogic

   ' Returns a collection of NorthwindEmployee objects.
   Public Shared Function GetAllEmployees() As ICollection

      Dim al As New ArrayList()

      Dim cts As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("NorthwindConnection")

      Dim sds As New SqlDataSource(cts.ConnectionString, "SELECT EmployeeID FROM Employees")

      Try
         Dim IDs As IEnumerable = sds.Select(DataSourceSelectArguments.Empty)

         ' Iterate through the Enumeration and create a
         ' NorthwindEmployee object for each ID.
         Dim enumerator As IEnumerator = IDs.GetEnumerator()
         While enumerator.MoveNext()
            ' The IEnumerable contains DataRowView objects.
            Dim row As DataRowView = CType(enumerator.Current,DataRowView)
            Dim id As String = row("EmployeeID").ToString()
            Dim nwe As New NorthwindEmployee(id)
            ' Add the NorthwindEmployee object to the collection.
            al.Add(nwe)
         End While
      Finally
         ' If anything strange happens, clean up.
         sds.Dispose()
      End Try

      Return al
   End Function 'GetAllEmployees


   Public Shared Function GetEmployee(anID As Object) As NorthwindEmployee
      If anID.Equals("-1") OrElse anID.Equals(DBNull.Value) Then
         Return New NorthwindEmployee()
      Else
         Return New NorthwindEmployee(anID)
      End If
   End Function 'GetEmployee


   Public Shared Sub UpdateEmployeeInfo(ne As NorthwindEmployee)
      Dim retval As Boolean = ne.Save()
      If Not retval Then
         Throw New NorthwindDataException("UpdateEmployee failed.")
      End If
   End Sub

   Public Shared Sub DeleteEmployee(ne As NorthwindEmployee)
      Dim retval As Boolean = ne.Delete()
      If Not retval Then
         Throw New NorthwindDataException("DeleteEmployee failed.")
      End If
   End Sub

   ' And so on...

End Class


Public Class NorthwindEmployee


   Public Sub New()
      ID = DBNull.Value
      lastName = ""
      firstName = ""
      title = ""
      titleOfCourtesy = ""
      reportsTo = - 1
   End Sub


   Public Sub New(anID As Object)
      Me.ID = anID

      Dim cts As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("NorthwindConnection")

      Dim conn As New SqlConnection(cts.ConnectionString)

      Dim sc As New SqlCommand(" SELECT FirstName,LastName,Title,TitleOfCourtesy,ReportsTo " & _
                               " FROM Employees " & _
                               " WHERE EmployeeID = @empId", conn)

      ' Add the employee ID parameter and set its value.
      sc.Parameters.Add(New SqlParameter("@empId", SqlDbType.Int)).Value = Int32.Parse(anID.ToString())
      Dim sdr As SqlDataReader = Nothing

      Try
         conn.Open()
         sdr = sc.ExecuteReader()

         ' Only loop once.
         If Not (sdr Is Nothing) AndAlso sdr.Read() Then
            ' The IEnumerable contains DataRowView objects.
            Me.aFirstName = sdr("FirstName").ToString()
            Me.aLastName = sdr("LastName").ToString()
            Me.aTitle = sdr("Title").ToString()
            Me.titleOfCourtesy = sdr("TitleOfCourtesy").ToString()
            If Not sdr.IsDBNull(4) Then
               Me.reportsTo = sdr.GetInt32(4)
            End If
         Else
            Throw New NorthwindDataException("Data not loaded for employee id.")
         End If
      Finally
         Try
            If Not (sdr Is Nothing) Then
               sdr.Close()
            End If
            conn.Close()
         Catch se As SqlException
            ' Log an event in the Application Event Log.
            Throw
         End Try
      End Try
   End Sub

   Private ID As Object
   Public ReadOnly Property EmpID() As String
      Get
         Return ID.ToString()
      End Get
   End Property

   Private aLastName As String
   Public Property LastName() As String
      Get
         Return aLastName
      End Get
      Set
         aLastName = value
      End Set
   End Property

   Private aFirstName As String
   Public Property FirstName() As String
      Get
         Return aFirstName
      End Get
      Set
         aFirstName = value
      End Set
   End Property

   Public ReadOnly Property FullName() As String
      Get
         Return FirstName & " " & LastName
      End Get
   End Property

   Private aTitle As String
   Public Property Title() As String
      Get
         Return aTitle
      End Get
      Set
         aTitle = value
      End Set
   End Property

   Private titleOfCourtesy As String
   Public Property Courtesy() As String
      Get
         Return titleOfCourtesy
      End Get
      Set
         titleOfCourtesy = value
      End Set
   End Property

   Private reportsTo As Integer
   Public Property Supervisor() As Integer
      Get
         Return reportsTo
      End Get
      Set
         reportsTo = value
      End Set
   End Property

   Public Function Save() As Boolean

      ' Implement persistence logic.
      Return True

   End Function 'Save


   Public Function Delete() As Boolean

     ' Implement delete logic.
     Return True

   End Function 'Delete
End Class


Friend Class NorthwindDataException
   Inherits Exception

   Public Sub New(msg As String)
      MyBase.New(msg)
   End Sub
End Class

End Namespace

注釈

OnInsertingクラスはOnDeleting 、、、、 OnSelectingおよびOnUpdatingSelect各メソッドで使用され、、、、およびに渡される入力パラメーターへのアクセスを提供します。 Update ObjectDataSourceMethodEventArgs Delete InsertコントロールObjectDataSourceのメソッド。The ObjectDataSourceMethodEventArgs class is used in the OnSelecting, OnUpdating, OnInserting, and OnDeleting methods to provide access to input parameters that are passed to the Select, Update, Delete, and Insert methods of the ObjectDataSource control. これらのパラメーターには、 InputParametersプロパティを使用してアクセスします。These parameters are accessed using the InputParameters property. 、、、またはDeletingイベントを処理するデリゲートを追加することにより、パラメーターの値を調べて操作し、必要な追加のプリプロセスを実行できます。 Inserting Updating SelectingBy adding a delegate to handle the Selecting, Updating, Inserting, or Deleting event, you can examine and manipulate the values of the parameters and perform any additional preprocessing that is required. このディクショナリのパラメーターを変更すると、その操作に対して呼び出されるメソッドのオーバーロードが影響を受けることになります。Any changes to the parameters in this dictionary will affect which method overload is called for the operation. コントロールのプロパティが設定されている場合、このディクショナリの項目のデータオブジェクトのプロパティのみを変更できます。パラメーターを追加または削除することはできません。 DataObjectTypeName ObjectDataSourceWhen the DataObjectTypeName property of the ObjectDataSource control is set, you can only modify the data object properties for the items in this dictionary; you cannot add or remove parameters. 詳細については、「Delete」を参照してください。For more information, see Delete.

コントロールObjectDataSourceは、ライフサイクルのさまざまなタイミングで基になるビジネスオブジェクトを操作するために処理できる多数のイベントを公開します。The ObjectDataSource control exposes many events that you can handle to work with the underlying business object at various times in its life cycle. 次の表に、イベントと、 EventArgs関連付けられているクラスおよびイベントハンドラーデリゲートを示します。The following table lists the events and associated EventArgs classes and event handler delegates.

eventEvent EventArgs クラスEventArgs class EventHandler デリゲートEventHandler delegate
ObjectCreatingObjectCreating.

ビジネスオブジェクトのインスタンスが作成される直前に発生します。Occurs immediately before the instance of the business object is created.
ObjectDataSourceEventArgs ObjectDataSourceObjectEventHandler
ObjectCreatedObjectCreated.

ビジネスオブジェクトのインスタンスが作成された直後に発生します。Occurs immediately after the instance of the business object is created.
ObjectDataSourceEventArgs ObjectDataSourceObjectEventHandler
SelectingSelecting.

データが取得される前に発生します。Occurs before the data is retrieved.
ObjectDataSourceSelectingEventArgs ObjectDataSourceSelectingEventHandler
InsertingUpdating、および DeletingInserting, Updating, and Deleting.

挿入、更新、または削除の各操作が実行される前に発生します。Occur before an insert, update, or delete operation is performed.
ObjectDataSourceMethodEventArgs ObjectDataSourceMethodEventHandler
SelectedSelected.

データが取得された後に発生します。Occurs after the data is retrieved.
ObjectDataSourceStatusEventArgs ObjectDataSourceStatusEventHandler
InsertedUpdated、および DeletedInserted, Updated, and Deleted.

挿入、更新、または削除の各操作が完了した後に発生します。Occur after the insert, update, or delete operation is completed.
ObjectDataSourceStatusEventArgs ObjectDataSourceStatusEventHandler
ObjectDisposingObjectDisposing.

ビジネスオブジェクトが破棄される前に発生します。Occurs before a business object is destroyed.
ObjectDataSourceDisposingEventArgs ObjectDataSourceDisposingEventHandler

コンストラクター

ObjectDataSourceMethodEventArgs(IOrderedDictionary) ObjectDataSourceMethodEventArgs(IOrderedDictionary) ObjectDataSourceMethodEventArgs(IOrderedDictionary) ObjectDataSourceMethodEventArgs(IOrderedDictionary)

指定された入力パラメーターのコレクションを使用して、ObjectDataSourceMethodEventArgs クラスの新しいインスタンスを初期化します。Initializes a new instance of the ObjectDataSourceMethodEventArgs class using the specified input parameters collection.

プロパティ

Cancel Cancel Cancel Cancel

イベントをキャンセルするかどうかを示す値を取得または設定します。Gets or sets a value indicating whether the event should be canceled.

(Inherited from CancelEventArgs)
InputParameters InputParameters InputParameters InputParameters

ビジネス オブジェクトのメソッドのパラメーターとそれらの値を含むコレクションを取得します。Gets a collection that contains business object method parameters and their values.

メソッド

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

適用対象

こちらもご覧ください