ObjectDataSource.UpdateMethod 속성

정의

ObjectDataSource 컨트롤이 데이터 업데이트를 위해 호출하는 메서드나 함수의 이름을 가져오거나 설정합니다.

public:
 property System::String ^ UpdateMethod { System::String ^ get(); void set(System::String ^ value); };
public string UpdateMethod { get; set; }
member this.UpdateMethod : string with get, set
Public Property UpdateMethod As String

속성 값

ObjectDataSource에서 데이터를 업데이트할 때 사용하는 메서드나 함수의 이름을 나타내는 문자열입니다. 기본값은 빈 문자열입니다.

예제

다음 세 가지 예제에는 웹 페이지, 코드 숨김 페이지 클래스 및 사용자를 검색 하 고 Northwind 데이터베이스의 Employees 테이블의 레코드를 업데이트할 수 있도록 데이터 액세스 클래스를 보여 줍니다.

첫 번째 예제 두 개가 포함 된 웹 페이지를 보여 줍니다 ObjectDataSource 컨트롤을 DropDownList 컨트롤 및 DetailsView 제어 합니다. 첫 번째 ObjectDataSource 컨트롤 및 DropDownList 검색 하 고 데이터베이스에서 직원 이름이 표시 되는 컨트롤입니다. 두 번째 ObjectDataSource 컨트롤 및 DetailsView 컨트롤은 검색, 표시 및 사용자가 선택 되어 직원 레코드의 데이터를 수정 하는 데 사용 됩니다.

<form id="Form1" method="post" runat="server">

    <asp:objectdatasource
      ID="ObjectDataSource1"
      runat="server"
      SelectMethod="GetFullNamesAndIDs"
      TypeName="Samples.AspNet.CS.EmployeeLogic" />

    <p>
    <asp:dropdownlist
      ID="DropDownList1"
      runat="server" 
      DataSourceID="ObjectDataSource1"
      DataTextField="FullName"
      DataValueField="EmployeeID" 
      AutoPostBack="True" 
      AppendDataBoundItems="true">
        <asp:ListItem Text="Select One" Value=""></asp:ListItem>
    </asp:dropdownlist>
    </p>

    <asp:objectdatasource
      ID="ObjectDataSource2"
      runat="server"
      SelectMethod="GetEmployee"
      UpdateMethod="UpdateEmployeeAddress"
      OnUpdating="EmployeeUpdating"
      OnSelected="EmployeeSelected"
      TypeName="Samples.AspNet.CS.EmployeeLogic" >
      <SelectParameters>
        <asp:ControlParameter ControlID="DropDownList1" DefaultValue="-1" Name="empID" />
      </SelectParameters>
    </asp:objectdatasource>
    
    <asp:DetailsView
        ID="DetailsView1"
        runat="server"
        DataSourceID="ObjectDataSource2" 
        AutoGenerateRows="false"
        AutoGenerateEditButton="true">  
        <Fields>
            <asp:BoundField HeaderText="Address" DataField="Address" />
            <asp:BoundField HeaderText="City" DataField="City" />
            <asp:BoundField HeaderText="Postal Code" DataField="PostalCode" />
        </Fields>  
    </asp:DetailsView>
   
</form>
<form id="form1" runat="server">

    <asp:objectdatasource
      ID="ObjectDataSource1"
      runat="server"
      SelectMethod="GetFullNamesAndIDs"
      TypeName="Samples.AspNet.CS.EmployeeLogic" />

    <p>
    <asp:dropdownlist
      ID="DropDownList1"
      runat="server" 
      DataSourceID="ObjectDataSource1"
      DataTextField="FullName"
      DataValueField="EmployeeID" 
      AutoPostBack="True" 
      AppendDataBoundItems="true">
        <asp:ListItem Text="Select One" Value=""></asp:ListItem>
    </asp:dropdownlist>
    </p>

    <asp:objectdatasource
      ID="ObjectDataSource2"
      runat="server"
      SelectMethod="GetEmployee"
      UpdateMethod="UpdateEmployeeAddress"
      OnUpdating="EmployeeUpdating"
      OnSelected="EmployeeSelected"
      TypeName="Samples.AspNet.CS.EmployeeLogic" >
      <SelectParameters>
        <asp:ControlParameter ControlID="DropDownList1" DefaultValue="-1" Name="empID" />
      </SelectParameters>
    </asp:objectdatasource>
    
    <asp:DetailsView
        ID="DetailsView1"
        runat="server"
        DataSourceID="ObjectDataSource2" 
        AutoGenerateRows="false"
        AutoGenerateEditButton="true">  
        <Fields>
            <asp:BoundField HeaderText="Address" DataField="Address" />
            <asp:BoundField HeaderText="City" DataField="City" />
            <asp:BoundField HeaderText="Postal Code" DataField="PostalCode" />
        </Fields>  
    </asp:DetailsView>
   
</form>

두 번째 예제에 대 한 처리기를 표시 합니다 SelectedUpdating 이벤트입니다. Selected 이벤트 처리기는 Employee 테이블 로부터 검색 된 데이터를 포함 하는 개체를 serialize 합니다. 직렬화 된 개체는 뷰 상태에 저장 됩니다. Updating 업데이트 되는 데이터 레코드에 대 한 원본 데이터가 포함 된 뷰 상태에 개체를 역직렬화 하는 이벤트 처리기입니다. 원래 데이터를 포함 하는 개체는 Update 메서드를 매개 변수로 전달 됩니다. 다른 프로세스에서 데이터를 수정 되었는지 여부를 검사할 수 있도록 원래 데이터를 데이터베이스에 전달 되어야 합니다.

public void EmployeeUpdating(object source, ObjectDataSourceMethodEventArgs e)
{
    DataContractSerializer dcs = new DataContractSerializer(typeof(Employee));

    String xmlData = ViewState["OriginalEmployee"].ToString();
    XmlReader reader = XmlReader.Create(new StringReader(xmlData));
    Employee originalEmployee = (Employee)dcs.ReadObject(reader);
    reader.Close();

    e.InputParameters.Add("originalEmployee", originalEmployee);
}

public void EmployeeSelected(object source, ObjectDataSourceStatusEventArgs e)
{
    if (e.ReturnValue != null)
    {
        DataContractSerializer dcs = new DataContractSerializer(typeof(Employee));
        StringBuilder sb = new StringBuilder();
        XmlWriter writer = XmlWriter.Create(sb);
        dcs.WriteObject(writer, e.ReturnValue);
        writer.Close();

        ViewState["OriginalEmployee"] = sb.ToString();
    }
}
Public Sub EmployeeUpdating(ByVal source As Object, ByVal e As ObjectDataSourceMethodEventArgs)
    Dim dcs As New DataContractSerializer(GetType(Employee))
    Dim xmlData As String
    Dim reader As XmlReader
    Dim originalEmployee As Employee

    xmlData = ViewState("OriginalEmployee").ToString()
    reader = XmlReader.Create(New StringReader(xmlData))
    originalEmployee = CType(dcs.ReadObject(reader), Employee)
    reader.Close()

    e.InputParameters.Add("originalEmployee", originalEmployee)
End Sub

Public Sub EmployeeSelected(ByVal source As Object, ByVal e As ObjectDataSourceStatusEventArgs)
    If e.ReturnValue IsNot Nothing Then
        Dim dcs As New DataContractSerializer(GetType(Employee))
        Dim sb As New StringBuilder()
        Dim writer As XmlWriter
        writer = XmlWriter.Create(sb)
        dcs.WriteObject(writer, e.ReturnValue)
        writer.Close()

        ViewState("OriginalEmployee") = sb.ToString()
    End If
End Sub

세 번째 예제에서는 Northwind 데이터베이스와 상호 작용 하는 데이터 액세스 클래스를 보여 줍니다. 클래스는 LINQ를 사용 하 여 쿼리하고 Employees 테이블을 업데이트 합니다. 이 예제에서는 LINQ to SQL 클래스 Northwind 데이터베이스 및 직원 테이블을 나타내는 필요 합니다. 자세한 내용은 방법: 만들 LINQ to SQL 클래스를 웹 프로젝트에서합니다.

public class EmployeeLogic
{
    public static Array GetFullNamesAndIDs()
    {
        NorthwindDataContext ndc = new NorthwindDataContext();

        var employeeQuery =
            from e in ndc.Employees
            orderby e.LastName
            select new { FullName = e.FirstName + " " + e.LastName, EmployeeID = e.EmployeeID };

        return employeeQuery.ToArray();
    }

    public static Employee GetEmployee(int empID)
    {
        if (empID < 0)
        {
            return null;
        }
        else
        {
            NorthwindDataContext ndc = new NorthwindDataContext();
            var employeeQuery =
                from e in ndc.Employees
                where e.EmployeeID == empID
                select e;

            return employeeQuery.Single();
        }
    }
 
    public static void UpdateEmployeeAddress(Employee originalEmployee, string address, string city, string postalcode)
    {
        NorthwindDataContext ndc = new NorthwindDataContext();
        ndc.Employees.Attach(originalEmployee, false);
        originalEmployee.Address = address;
        originalEmployee.City = city;
        originalEmployee.PostalCode = postalcode;
        ndc.SubmitChanges();
    }
}
Public Class EmployeeLogic
    Public Shared Function GetFullNamesAndIDs() As Array
        Dim ndc As New NorthwindDataContext()

        Dim employeeQuery = _
            From e In ndc.Employees _
            Order By e.LastName _
            Select FullName = e.FirstName + " " + e.LastName, EmployeeID = e.EmployeeID

        Return employeeQuery.ToArray()
    End Function

    Public Shared Function GetEmployee(ByVal empID As Integer) As Employee

        If (empID < 0) Then
            Return Nothing
        Else
            Dim ndc As New NorthwindDataContext()
            Dim employeeQuery = _
                From e In ndc.Employees _
                Where e.EmployeeID = empID _
                Select e

            Return employeeQuery.Single()
        End If
    End Function

    Public Shared Sub UpdateEmployeeAddress(ByVal originalEmployee As Employee, ByVal address As String, ByVal city As String, ByVal postalcode As String)

        Dim ndc As New NorthwindDataContext()
        ndc.Employees.Attach(originalEmployee, False)
        originalEmployee.Address = address
        originalEmployee.City = city
        originalEmployee.PostalCode = postalcode
        ndc.SubmitChanges()
    End Sub
End Class

설명

합니다 ObjectDataSource 컨트롤이 있다고 가정으로 식별 되는 메서드는 UpdateMethod 속성 일괄 처리 대신 한 번에 한 업데이트를 수행 합니다.

UpdateMethod 에 위임 하는 속성을 UpdateMethod 의 속성을 ObjectDataSourceView 개체와 연결 된는 ObjectDataSource 컨트롤.

매개 변수 이름에 대 한 구성 되었는지 확인 합니다 ObjectDataSource 에서 제어를 UpdateParameters 컬렉션 select 메서드에 의해 반환 되는 열 이름과 일치 합니다.

개체 수명

로 식별 되는 메서드를 UpdateMethod 속성에는 인스턴스 메서드 일 수 있습니다 또는 static (Shared Visual Basic에서) 메서드. 인스턴스 메서드인 경우 비즈니스 개체가 만들어지고 소멸 될 때마다 지정 된 메서드는 UpdateMethod 속성 이라고 합니다. 처리할 수 있습니다 합니다 ObjectCreatedObjectCreating 에 지정 된 메서드 앞에 비즈니스 개체를 사용 하는 이벤트를 UpdateMethod 속성 이라고 합니다. 처리할 수도 있습니다는 ObjectDisposing 메서드를 지정 된 후 발생 하는 이벤트를 UpdateMethod 속성 이라고 합니다. 비즈니스 개체를 구현 하는 경우는 IDisposable 인터페이스는 Dispose 개체를 제거 하기 전에 호출 됩니다. 방법이 static (Shared Visual Basic의), 비즈니스 개체 생성 되지 않고 처리할 수 없는 합니다 ObjectCreated, ObjectCreating, 및 ObjectDisposing 이벤트입니다.

병합 하는 매개 변수

매개 변수가 추가 됩니다는 UpdateParameters 다음 세 가지 소스의 컬렉션:

  • 런타임에 데이터 바인딩된 컨트롤입니다.

  • UpdateParameters 요소를 선언적으로 합니다.

  • Updating 이벤트 처리기를 프로그래밍 방식으로 합니다.

데이터 바인딩된 컨트롤에서 생성 된 모든 매개 변수가 먼저 추가 됩니다는 UpdateParameters 컬렉션입니다. 예를 들어 경우는 ObjectDataSource 컨트롤이 바인딩되는 GridView 열이 있는 컨트롤 NameNumber에 대 한 매개 변수 NameNumber 컬렉션에 추가 됩니다. 매개 변수가의 정확한 이름은 OldValuesParameterFormatString 속성입니다. 이러한 매개 변수의 데이터 형식은 string합니다. 다음으로에 나와 있는 매개 변수는 UpdateParameters 요소가 추가 됩니다. 경우에 매개 변수를 UpdateParameters 에 이미 있는 매개 변수로 동일한 이름을 가진 요소가 UpdateParameters 기존 매개 변수 컬렉션에 지정 된 매개 변수와 일치 하도록 수정 됩니다는 UpdateParameters 요소. 일반적으로이 매개 변수의 데이터 형식을 수정 하려면 사용 됩니다. 마지막으로 프로그래밍 방식으로 추가 및 제거할 수의 매개 변수를 Updating 하기 전에 발생 하는 이벤트를 Update 메서드를 실행 합니다. 메서드는 매개 변수를 병합 된 후 확인 됩니다. 메서드 확인은 다음 섹션에 설명 되어 있습니다.

중요

클라이언트에서 받은 모든 매개 변수 값을 확인 해야 합니다. 런타임에 매개 변수 값을 UpdateMethod 속성입니다.

메서드 확인

경우는 Update 메서드를 호출할 매개 변수에서 선언적으로 생성 된 데이터 바인딩된 컨트롤에서 데이터 필드를 UpdateParameters 요소 및에 추가 된 매개 변수는 Updating 이벤트 처리기 모두 병합 됩니다. (자세한 내용은 이전 섹션 참조). ObjectDataSource 호출할 메서드를 찾으려면 다음 시도 제어 합니다. 에 지정 된 이름 가진 하나 이상의 메서드를 찾습니다 먼저는 UpdateMethod 속성입니다. 일치 하는 항목이 없으면는 InvalidOperationException 예외가 throw 됩니다. 일치 하는 항목이 있으면 매개 변수 이름과 일치 하는 찾습니다. 예를 들어 지정 된 형식 합니다 TypeName 속성이 라는 두 개의 메서드도 UpdateARecord합니다. 하나의 UpdateARecord 하나의 매개 변수가 ID, 및 다른 UpdateARecord 두 매개 변수가 NameNumber합니다. 경우는 UpdateParameters 컬렉션에 명명 된 매개 변수만 IDUpdateARecord 메서드를만 ID 매개 변수 라고 합니다. 메서드를 확인 하는 데 매개 변수의 형식을 확인 하지 않습니다. 매개 변수의 순서는 중요 하지 않습니다.

경우는 DataObjectTypeName 속성, 메서드를 다른 방식으로 확인 됩니다. ObjectDataSource 에 지정 된 이름의 메서드를 찾습니다는 UpdateMethod 는 매개 변수 형식 중 하나를 사용 하는 속성에 지정 된 된 DataObjectTypeName 속성. 이 경우 매개 변수의 이름을 중요 하지 않습니다.

적용 대상

추가 정보