Saya mencari cara sederhana untuk membuat tiruan dari DataRow. Seperti mengambil snapshot dari Row dan menyimpannya. Nilai Row asli kemudian bebas berubah tetapi kami masih memiliki salinan tersimpan lain yang tidak berubah. Apakah ini cara yang benar untuk melakukannya?
DataRow Source, Destination;
// Assume we create some columns and fill them with values
Destination.ItemArray = Source.ItemArray;
Apakah ini hanya akan mengatur referensi ItemArray Snapshot untuk menunjuk ke yang ada di Source atau apakah itu benar-benar membuat salinan terpisah? Haruskah saya melakukan ini?
Destination.ItemArray = Source.ItemArray.Clone();
EDIT: Saya tidak berpikir cuplikan kode kedua benar-benar mengkompilasi.
Jawaban:
Anda dapat menggunakan
ImportRow
metode untuk menyalin Row dari DataTable ke DataTable dengan skema yang sama:Memperbarui:
Dengan Edit baru Anda, saya yakin:
akan bekerja
sumber
destRow.ItemArray = sourceRow.ItemArray
lalu tambahkan baris kembali dengan sederhanadestTable.Rows.Add(destRow);
Catatan: jawaban helfpul cuongle memiliki semua bahan, tetapi solusinya dapat disederhanakan (tidak perlu
.ItemArray
) dan dapat disusun ulang agar lebih cocok dengan pertanyaan seperti yang ditanyakan.Untuk membuat klon (terisolasi) dari
System.Data.DataRow
instance tertentu , Anda dapat melakukan hal berikut:Catatan: Kloning dangkal dilakukan , yang berfungsi sebagaimana adanya dengan nilai kolom yang merupakan contoh tipe nilai , tetapi lebih banyak pekerjaan akan diperlukan untuk juga membuat salinan independen dari nilai kolom yang berisi contoh tipe referensi (dan membuat salinan independen seperti itu tidak selalu memungkinkan ).
sumber
Sepertinya Anda tidak ingin menyimpan seluruh DataTable sebagai salinan, karena Anda hanya memerlukan beberapa baris, bukan? Jika Anda memiliki kriteria yang dapat Anda tentukan dengan memilih di tabel, Anda dapat menyalin hanya baris tersebut ke array cadangan tambahan DataRow seperti
Fungsi .Select () memiliki beberapa opsi dan yang ini misalnya dapat dibaca sebagai SQL
Kemudian Anda dapat mengimpor baris yang Anda inginkan seperti dijelaskan di atas.
... untuk setiap valid yang Anda suka, tetapi kolomnya harus sama di setiap tabel.
Beberapa hal yang harus Anda ketahui tentang ImportRow adalah bahwa akan ada kesalahan selama runtime saat menggunakan kunci utama!
Pertama saya ingin memeriksa apakah baris sudah ada yang juga gagal karena kunci utama hilang, tetapi kemudian pemeriksaan selalu gagal. Pada akhirnya saya memutuskan untuk menghapus baris yang ada sepenuhnya dan mengimpor baris yang saya inginkan lagi.
Masalah kedua memang membantu untuk memahami apa yang terjadi. Cara saya menggunakan fungsi impor adalah menduplikasi baris dengan entri yang dipertukarkan dalam satu kolom. Saya menyadari bahwa itu selalu berubah dan itu masih merupakan referensi ke baris dalam larik. Saya pertama-tama harus mengimpor yang asli dan kemudian mengubah entri yang saya inginkan.
Referensi tersebut juga menjelaskan kesalahan kunci utama yang muncul ketika saya pertama kali mencoba mengimpor baris karena baris itu benar-benar digandakan.
sumber
Namun untuk memastikan bahwa baris baru Anda dapat diakses di tabel baru, Anda perlu menutup tabel:
sumber
DataTable destination = source.Clone()
harus dilakukan), tetapi jika tidak, jawaban ini baik-baik saja dan bahkan lebih disukai daripada.ItemArray
pendekatan dalam jawaban yang diterima.