내보내기(0) 인쇄
모두 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

ObjectDataSourceMethodEventArgs 클래스

ObjectDataSource 컨트롤의 Inserting, UpdatingDeleting 이벤트에 대한 데이터를 제공합니다.

네임스페이스:  System.Web.UI.WebControls
어셈블리:  System.Web(System.Web.dll)

public class ObjectDataSourceMethodEventArgs : CancelEventArgs

ObjectDataSourceMethodEventArgs 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Public 메서드ObjectDataSourceMethodEventArgs지정된 입력 매개 변수 컬렉션을 사용하여 ObjectDataSourceMethodEventArgs 클래스의 새 인스턴스를 초기화합니다.
위쪽

  이름설명
Public 속성Cancel이벤트를 취소해야 할지 여부를 나타내는 값을 가져오거나 설정합니다. (CancelEventArgs에서 상속됨)
Public 속성InputParameters비즈니스 개체 메서드 매개 변수와 해당 값이 들어 있는 컬렉션을 가져옵니다.
위쪽

  이름설명
Public 메서드Equals(Object) 지정한 개체가 현재 개체와 같은지 여부를 확인합니다. (Object에서 상속됨)
Protected 메서드Finalize 개체가 가비지 수집자에서 회수되기 전에, 해당 개체에서 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다. (Object에서 상속됨)
Public 메서드GetHashCode기본 해시 함수로 작동합니다. (Object에서 상속됨)
Public 메서드GetType현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)
Protected 메서드MemberwiseClone현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨)
Public 메서드ToString현재 개체를 나타내는 문자열을 반환합니다. (Object에서 상속됨)
위쪽

ObjectDataSourceMethodEventArgs 클래스는 OnSelecting, OnUpdating, OnInsertingOnDeleting 메서드에서 ObjectDataSource 컨트롤의 Select, Update, DeleteInsert 매개 변수에 전달된 입력 매개 변수에 액세스하는 데 사용됩니다. 이러한 매개 변수는 InputParameters 속성을 사용하여 액세스됩니다. 대리자를 추가하여 Selecting, Updating, Inserting 또는 Deleting 이벤트를 처리하면 매개 변수 값을 검사 및 조작하고 필요한 추가 전처리를 수행할 수 있습니다. 이 사전의 매개 변수를 변경하면 해당 작업을 위해 호출되는 메서드 오버로드에 영향이 미칩니다. ObjectDataSource 컨트롤의 DataObjectTypeName 속성이 설정되어 있으면 이 사전에 있는 항목의 데이터 개체 속성만 수정할 수 있고 매개 변수를 추가하거나 제거할 수는 없습니다. 자세한 내용은 Delete을 참조하십시오.

ObjectDataSource 컨트롤은 주기 중 여러 번 내부 비즈니스 개체를 사용하여 작업하기 위해 처리할 수 있는 많은 이벤트를 노출합니다. 다음 표에는 이벤트 및 관련 EventArgs 클래스와 이벤트 처리기 대리자가 나열되어 있습니다.

event

EventArgs 클래스

EventHandler 대리자

ObjectCreating .

비즈니스 개체의 인스턴스가 만들어지기 직전에 발생합니다.

ObjectDataSourceEventArgs

ObjectDataSourceObjectEventHandler

ObjectCreated .

비즈니스 개체의 인스턴스가 만들어진 직후에 발생합니다.

ObjectDataSourceEventArgs

ObjectDataSourceObjectEventHandler

Selecting .

데이터가 검색되기 전에 발생합니다.

ObjectDataSourceSelectingEventArgs

ObjectDataSourceSelectingEventHandler

Inserting , UpdatingDeleting

삽입, 업데이트 또는 삭제 작업이 수행되기 전에 발생합니다.

ObjectDataSourceMethodEventArgs

ObjectDataSourceMethodEventHandler

Selected .

데이터가 검색된 후 발생합니다.

ObjectDataSourceStatusEventArgs

ObjectDataSourceStatusEventHandler

Inserted , UpdatedDeleted

삽입, 업데이트 또는 삭제 작업이 완료된 후 발생합니다.

ObjectDataSourceStatusEventArgs

ObjectDataSourceStatusEventHandler

ObjectDisposing .

비즈니스 개체가 소멸되기 전에 발생합니다.

ObjectDataSourceDisposingEventArgs

ObjectDataSourceDisposingEventHandler

이 단원에는 두 개의 코드 예제가 있습니다. 첫 번째 코드 예제에서는 비즈니스 개체를 가진 ObjectDataSource 컨트롤과 DetailsView 컨트롤을 사용하여 데이터를 삽입하는 방법을 보여 줍니다. 두 번째 코드 예제에서는 첫 번째 코드 예제에서 사용하는 중간 계층 비즈니스 개체의 예를 제공합니다.

다음 코드 예제에서는 비즈니스 개체를 가진 ObjectDataSource 컨트롤과 DetailsView 컨트롤을 사용하여 데이터를 삽입하는 방법을 보여 줍니다. 처음에는 DetailsView에 새 NorthwindEmployee 레코드와 자동으로 생성된 삽입 단추가 표시됩니다. DetailsView 컨트롤의 필드에 데이터를 입력한 후 삽입 단추를 클릭하면 InsertMethod 속성이 Insert 작업을 수행하는 메서드를 식별합니다.

이 예제에서는 UpdateEmployeeInfo 메서드가 삽입을 수행하는 데 사용되지만 데이터를 삽입하려면 NorthwindEmployee 매개 변수가 필요합니다. 이 때문에 DetailsView 컨트롤이 자동으로 전달하는 문자열 컬렉션은 충분하지 않습니다. NorthwindEmployeeInserting 대리자는 Inserting 이벤트를 처리하는 ObjectDataSourceMethodEventHandler 개체이며, Insert 작업이 진행되기 전에 입력 매개 변수를 조작할 수 있도록 해 줍니다. UpdateEmployeeInfo 메서드에는 매개 변수로 NorthwindEmployee 개체가 필요하므로 문자열 컬렉션을 사용하여 이 개체가 만들어지고 InputParameters 컬렉션에 추가됩니다.


<%@ 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>


다음 코드 예제에서는 이전 코드 예제에서 사용하는 중간 계층 비즈니스 개체의 예를 제공합니다. 다음은 코드 예제에 정의된 두 개의 주 클래스에 대한 설명입니다.

  • 비즈니스 논리를 캡슐화하는 상태 비저장 클래스인 EmployeeLogic 클래스

  • 데이터 계층의 데이터를 로드하고 유지하는 데 필요한 기본 기능만 포함된 모델 클래스인 NorthwindEmployee 클래스

또한 편의를 위해 NorthwindDataException 클래스가 제공됩니다.

이 예제 클래스 집합은 Microsoft SQL Server 및 Microsoft Access 제품에서 사용할 수 있는 예제 데이터베이스인 Northwind Traders 데이터베이스를 사용합니다. 전체 작업 예제를 보려면 이러한 클래스를 응용 프로그램 루트에 있는 App_Code 디렉터리에 넣거나, 컴파일한 후 결과 DLL을 Bin 디렉터리에 넣어 사용합니다. UpdateEmployeeInfo 메서드가 완전히 구현되지 않았으므로 이 예제에서 작업할 때 Northwind Traders 데이터베이스에 데이터를 삽입하지 않을 것입니다.


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) { }
  }
}


.NET Framework

4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0에서 지원

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

.NET Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

커뮤니티 추가 항목

추가
표시:
© 2015 Microsoft