Bagikan melalui


Status Baris dan Versi Baris

ADO.NET mengelola baris dalam tabel menggunakan status dan versi baris. Status baris menunjukkan status baris; versi baris mempertahankan nilai yang disimpan dalam baris saat dimodifikasi, termasuk nilai saat ini, asli, dan default. Misalnya, setelah Anda melakukan modifikasi pada kolom dalam satu baris, baris tersebut akan memiliki status baris Modified, dan dua versi baris: Current, yang berisi nilai baris saat ini, dan Original, yang berisi nilai baris sebelum kolom diubah.

Setiap objek DataRow memiliki properti RowState yang dapat Anda periksa untuk menentukan status baris saat ini. Tabel berikut memberikan gambaran singkat dari masing-masing nilai enumerasi RowState.

Nilai RowState Deskripsi
Unchanged Tidak ada perubahan yang dilakukan sejak panggilan terakhir ke AcceptChanges atau sejak baris dibuat oleh DataAdapter.Fill.
Added Baris telah ditambahkan ke tabel, tetapi AcceptChanges belum dipanggil.
Modified Beberapa elemen baris telah diubah.
Deleted Baris telah dihapus dari tabel, dan AcceptChanges belum dipanggil.
Detached Baris bukan bagian dari DataRowCollection. RowState dari baris yang baru dibuat diatur ke Detached. Setelah DataRow baru ditambahkan ke DataRowCollection dengan memanggil metode Add, nilai properti RowState diatur ke Added.

Detached juga disetel untuk baris yang telah dihapus dari DataRowCollection menggunakan metode Remove, atau dengan metode Delete diikuti dengan metode AcceptChanges.

Saat AcceptChanges dipanggil pada DataSet, DataTable, atau DataRow, semua baris dengan status baris Deleted dihapus. Baris yang tersisa diberi status baris Unchanged, dan nilai dalam versi baris Original ditimpa dengan nilai versi baris Current. Saat RejectChanges dipanggil, semua baris dengan status baris Added dihapus. Baris yang tersisa diberi status baris Unchanged, dan nilai dalam versi baris Current ditimpa dengan nilai versi baris Original.

Anda dapat melihat versi baris yang berbeda dari sebuah baris dengan meneruskan parameter DataRowVersion dengan referensi kolom, seperti yang ditunjukkan pada contoh berikut.

Dim custRow As DataRow = custTable.Rows(0)  
Dim custID As String = custRow("CustomerID", DataRowVersion.Original).ToString()  
DataRow custRow = custTable.Rows[0];  
string custID = custRow["CustomerID", DataRowVersion.Original].ToString();  

Tabel berikut memberikan gambaran singkat dari masing-masing nilai enumerasi DataRowVersion.

Nilai DataRowVersion Deskripsi
Current Nilai saat ini untuk baris. Versi baris ini tidak ada untuk baris dengan RowState dari Deleted.
Default Versi baris default untuk baris tertentu. Versi baris default untuk baris Added, Modified, atau Deleted adalah Current. Versi baris default untuk baris Detached adalah Proposed.
Original Nilai asli untuk baris. Versi baris ini tidak ada untuk baris dengan RowState dari Added.
Proposed Nilai yang diusulkan untuk baris. Versi baris ini ada selama operasi edit pada baris, atau untuk baris yang bukan bagian dari DataRowCollection.

Anda dapat menguji apakah DataRow memiliki versi baris tertentu dengan memanggil metode HasVersion dan meneruskan DataRowVersion sebagai argumen. Misalnya, DataRow.HasVersion(DataRowVersion.Original) akan mengembalikan false untuk baris yang baru ditambahkan sebelum AcceptChanges dipanggil.

Contoh kode berikut menampilkan nilai di semua baris tabel yang dihapus. Deleted baris tidak memiliki Current versi baris, jadi Anda harus melewati DataRowVersion.Original saat mengakses nilai kolom.

Dim catTable As DataTable = catDS.Tables("Categories")  
  
Dim delRows() As DataRow = catTable.Select(Nothing, Nothing, DataViewRowState.Deleted)  
  
Console.WriteLine("Deleted rows:" & vbCrLf)  
  
Dim catCol As DataColumn  
Dim delRow As DataRow  
  
For Each catCol In catTable.Columns  
  Console.Write(catCol.ColumnName & vbTab)  
Next  
Console.WriteLine()  
  
For Each delRow In delRows  
  For Each catCol In catTable.Columns  
    Console.Write(delRow(catCol, DataRowVersion.Original) & vbTab)  
  Next  
  Console.WriteLine()  
Next  
DataTable catTable = catDS.Tables["Categories"];  
  
DataRow[] delRows = catTable.Select(null, null, DataViewRowState.Deleted);  
  
Console.WriteLine("Deleted rows:\n");  
  
foreach (DataColumn catCol in catTable.Columns)  
  Console.Write(catCol.ColumnName + "\t");  
Console.WriteLine();  
  
foreach (DataRow delRow in delRows)  
{  
  foreach (DataColumn catCol in catTable.Columns)  
    Console.Write(delRow[catCol, DataRowVersion.Original] + "\t");  
  Console.WriteLine();  
}  

Lihat juga