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();
}