ObjectDataSource.UpdateMethod Properti
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk