Bagikan melalui


ObjectDataSource.UpdateMethod Properti

Definisi

Mendapatkan atau mengatur nama metode atau fungsi yang ObjectDataSource dipanggil kontrol untuk memperbarui data.

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

Nilai Properti

String yang mewakili nama metode atau fungsi yang ObjectDataSource digunakan untuk memperbarui data. Defaultnya adalah string kosong.

Contoh

Tiga contoh berikut menunjukkan halaman Web, kelas halaman di belakang kode, dan kelas akses data yang memungkinkan pengguna untuk mengambil dan memperbarui rekaman dalam tabel Karyawan di database Northwind.

Contoh pertama memperlihatkan halaman Web yang berisi dua ObjectDataSource kontrol, DropDownList kontrol, dan DetailsView kontrol. Kontrol pertama ObjectDataSource dan DropDownList kontrol digunakan untuk mengambil dan menampilkan nama karyawan dari database. Kontrol kedua ObjectDataSource dan DetailsView kontrol digunakan untuk mengambil, menampilkan, dan memodifikasi data dari rekaman karyawan yang dipilih oleh pengguna.

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

Contoh kedua menunjukkan handler untuk Selected peristiwa dan Updating . Penanganan Selected aktivitas menserialisasikan objek yang berisi data yang diambil dari tabel Karyawan. Objek yang diserialisasikan disimpan dalam status tampilan. Penanganan Updating aktivitas mendeserialisasi objek dalam status tampilan yang berisi data asli untuk rekaman data yang sedang diperbarui. Objek yang berisi data asli diteruskan sebagai parameter ke metode Perbarui. Data asli harus diteruskan ke database sehingga dapat digunakan untuk memeriksa apakah data telah dimodifikasi oleh proses lain.

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

Contoh ketiga memperlihatkan kelas akses data yang berinteraksi dengan database Northwind. Kelas menggunakan LINQ untuk mengkueri dan memperbarui tabel Karyawan. Contohnya memerlukan kelas LINQ ke SQL yang mewakili database Northwind dan tabel Karyawan. Untuk informasi selengkapnya, lihat Cara: Membuat LINQ ke Kelas SQL di Proyek Web.

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

Keterangan

ObjectDataSource Kontrol mengasumsikan bahwa metode yang diidentifikasi oleh UpdateMethod properti melakukan pembaruan satu per satu, bukan dalam batch.

Properti UpdateMethod mendelegasikan ke UpdateMethod properti ObjectDataSourceView objek yang terkait dengan ObjectDataSource kontrol.

Pastikan bahwa nama parameter yang dikonfigurasi untuk ObjectDataSource kontrol dalam UpdateParameters koleksi cocok dengan nama kolom yang dikembalikan oleh metode pilih.

Masa Pakai objek

Metode yang diidentifikasi oleh UpdateMethod properti dapat menjadi metode instans atau static metode (Shared dalam Visual Basic). Jika ini adalah metode instans, objek bisnis dibuat dan dihancurkan setiap kali metode yang ditentukan oleh UpdateMethod properti dipanggil. Anda dapat menangani ObjectCreated peristiwa dan ObjectCreating untuk bekerja dengan objek bisnis sebelum metode yang ditentukan oleh UpdateMethod properti dipanggil. Anda juga dapat menangani ObjectDisposing peristiwa yang dimunculkan setelah metode yang ditentukan oleh UpdateMethod properti dipanggil. Jika objek bisnis mengimplementasikan IDisposable antarmuka, Dispose metode dipanggil sebelum objek dihancurkan. Jika metodenya adalah static (Shared di Visual Basic), objek bisnis tidak pernah dibuat dan Anda tidak dapat menangani ObjectCreatedperistiwa , ObjectCreating, dan ObjectDisposing .

Penggabungan Parameter

Parameter ditambahkan ke UpdateParameters koleksi dari tiga sumber:

  • Dari kontrol terikat data, pada durasi.

  • UpdateParameters Dari elemen , secara deklaratif.

  • Dari penanganan Updating aktivitas, secara terprogram.

Pertama, parameter apa pun yang dihasilkan dari kontrol terikat data ditambahkan ke UpdateParameters koleksi. Misalnya, jika ObjectDataSource kontrol terikat ke GridView kontrol yang memiliki kolom Name dan Number, parameter untuk Name dan Number ditambahkan ke koleksi. Nama parameter yang tepat tergantung pada OldValuesParameterFormatString properti . Jenis data parameter ini adalah string. Selanjutnya, parameter yang tercantum dalam UpdateParameters elemen ditambahkan. Jika parameter dalam UpdateParameters elemen ditemukan dengan nama yang sama dengan parameter yang sudah ada dalam UpdateParameters koleksi, parameter yang ada dimodifikasi agar sesuai dengan parameter yang ditentukan dalam UpdateParameters elemen . Biasanya, ini digunakan untuk memodifikasi jenis data dalam parameter . Terakhir, Anda dapat menambahkan dan menghapus parameter secara terprogram dalam peristiwa tersebut Updating , yang terjadi sebelum Update metode dijalankan. Metode diselesaikan setelah parameter digabungkan. Resolusi metode dibahas di bagian berikutnya.

Penting

Anda harus memvalidasi nilai parameter apa pun yang Anda terima dari klien. Runtime hanya mengganti nilai parameter ke UpdateMethod dalam properti .

Resolusi Metode

Update Ketika metode dipanggil, bidang data dari kontrol terikat data, parameter yang dibuat secara deklaratif dalam UpdateParameters elemen, dan parameter yang ditambahkan dalam Updating penanganan aktivitas semuanya digabungkan. (Untuk informasi selengkapnya, lihat bagian sebelumnya.) ObjectDataSource Kontrol kemudian mencoba menemukan metode yang akan dipanggil. Pertama, ia mencari satu atau beberapa metode dengan nama yang ditentukan dalam UpdateMethod properti . Jika tidak ada kecocokan yang ditemukan, InvalidOperationException pengecualian akan dilemparkan. Jika kecocokan ditemukan, kecocokan kemudian mencari nama parameter yang cocok. Misalnya, misalkan jenis yang ditentukan oleh TypeName properti memiliki dua metode bernama UpdateARecord. Satu UpdateARecord memiliki satu parameter, ID, dan yang lain UpdateARecord memiliki dua parameter, Name dan Number. UpdateParameters Jika koleksi hanya memiliki satu parameter bernama ID, UpdateARecord metode hanya dengan parameter dipanggilID. Jenis parameter tidak diperiksa dalam menyelesaikan metode. Urutan parameter tidak masalah.

DataObjectTypeName Jika properti diatur, metode diselesaikan dengan cara yang berbeda. ObjectDataSource Mencari metode dengan nama yang ditentukan dalam UpdateMethod properti yang mengambil satu parameter dari jenis yang ditentukan dalam DataObjectTypeName properti . Dalam hal ini, nama parameter tidak masalah.

Berlaku untuk

Lihat juga