Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Nota
Kelas DataSet dan kelas terkait adalah teknologi .NET Framework warisan dari awal 2000-an yang memungkinkan aplikasi untuk bekerja dengan data dalam memori saat aplikasi terputus dari database. Teknologi ini sangat berguna untuk aplikasi yang memungkinkan pengguna memodifikasi data dan mempertahankan perubahan kembali ke database. Meskipun himpunan data adalah teknologi yang terbukti berhasil, pendekatan yang direkomendasikan untuk aplikasi .NET baru adalah menggunakan Entity Framework Core. Entity Framework menyediakan cara yang lebih alami untuk bekerja dengan data tabular sebagai model objek, dan memiliki antarmuka pemrograman yang lebih sederhana.
Memvalidasi data adalah proses mengonfirmasi bahwa nilai yang dimasukkan ke dalam objek data sesuai dengan batasan dalam skema himpunan data. Proses validasi juga mengonfirmasi bahwa nilai-nilai ini mengikuti aturan yang telah dibuat untuk aplikasi Anda. Ini adalah praktik yang baik untuk memvalidasi data sebelum mengirim pembaruan ke database yang mendasar. Ini mengurangi kesalahan serta potensi jumlah perjalanan pulang pergi antara aplikasi dan database.
Anda dapat mengonfirmasi bahwa data yang sedang ditulis ke himpunan data valid dengan membangun pemeriksaan validasi ke dalam himpunan data itu sendiri. Himpunan data dapat memeriksa data terlepas dari bagaimana pembaruan dilakukan — baik secara langsung oleh kontrol dalam formulir, dalam komponen, atau dengan cara lain. Karena himpunan data adalah bagian dari aplikasi Anda (tidak seperti backend database), ini adalah tempat logis untuk membangun validasi khusus aplikasi.
Tempat terbaik untuk menambahkan validasi ke aplikasi Anda adalah dalam file kelas parsial himpunan data. Di Visual Basic atau Visual C#, buka Perancang Himpunan Data dan klik dua kali kolom atau tabel yang ingin Anda buat validasinya. Tindakan ini membuka file kode, tempat Anda dapat membuat ColumnChanging atau RowChanging penanganan aktivitas.
Validasi data
Validasi dalam himpunan data dilakukan dengan cara berikut:
Dengan membuat validasi khusus aplikasi Anda sendiri yang dapat memeriksa nilai di kolom data individual selama perubahan. Untuk informasi selengkapnya, lihat Cara: Memvalidasi data selama perubahan kolom.
Dengan membuat validasi khusus aplikasi Anda sendiri yang dapat memeriksa data ke nilai saat seluruh baris data berubah. Untuk informasi selengkapnya, lihat Cara: Memvalidasi data selama perubahan baris.
Dengan membuat kunci, batasan unik, dan sebagainya sebagai bagian dari definisi skema aktual dari himpunan data.
Dengan mengatur properti DataColumn objek, seperti MaxLength, , AllowDBNulldan Unique.
Beberapa peristiwa dimunculkan oleh DataTable objek ketika perubahan terjadi dalam rekaman:
- Peristiwa ColumnChanging dan ColumnChanged dimunculkan selama dan setelah setiap perubahan pada kolom individual. Kejadian ColumnChanging ini berguna saat Anda ingin memvalidasi perubahan di kolom tertentu. Informasi tentang perubahan yang diusulkan diteruskan sebagai argumen dengan peristiwa.
- Peristiwa RowChanging dan RowChanged dimunculkan selama dan setelah perubahan berturut-turut. Acara RowChanging ini lebih umum. Ini menunjukkan bahwa perubahan terjadi di suatu tempat di baris, tetapi Anda tidak tahu kolom mana yang telah berubah.
Secara default, setiap perubahan ke kolom oleh karena itu menimbulkan empat peristiwa. Yang pertama adalah acara ColumnChanging dan ColumnChanged untuk kolom tertentu yang sedang diubah. Selanjutnya adalah RowChanging dan RowChanged peristiwa. Jika beberapa perubahan sedang dilakukan pada baris, peristiwa akan dinaikkan untuk setiap perubahan.
Nota
Metode BeginEdit pada baris data menonaktifkan kejadian RowChanging dan RowChanged setelah setiap perubahan kolom individual. Dalam hal ini, peristiwa tidak dinaikkan sampai metode EndEdit telah dipanggil, ketika peristiwa RowChanging dan RowChanged dinaikkan hanya sekali. Untuk informasi selengkapnya, lihat Menonaktifkan batasan saat mengisi himpunan data.
Peristiwa yang Anda pilih tergantung pada seberapa terperinci yang Anda inginkan untuk validasi. Jika penting bagi Anda untuk segera menangkap kesalahan saat kolom berubah, bangun validasi dengan menggunakan peristiwa ColumnChanging. Jika tidak, gunakan RowChanging event, yang mungkin mengakibatkan beberapa kesalahan tertangkap sekaligus. Selain itu, jika data Anda disusun sehingga nilai satu kolom divalidasi berdasarkan konten kolom lain, lakukan validasi Anda selama peristiwa.RowChanging
Saat rekaman diperbarui, DataTable objek akan memunculkan peristiwa yang dapat Anda tanggapi saat perubahan terjadi dan setelah perubahan dilakukan.
Jika aplikasi Anda menggunakan himpunan data yang ditik, Anda dapat membuat penanganan aktivitas yang ditik dengan kuat. Ini menambahkan empat peristiwa jenis tambahan yang dapat Anda buat handlernya: dataTableNameRowChanging, dataTableNameRowChanged, dataTableNameRowDeleting, dan dataTableNameRowDeleted. Pengendali acara yang bertipe ini meneruskan argumen yang meliputi nama-nama kolom tabel Anda, sehingga membuat kode lebih mudah ditulis dan dibaca.
Peristiwa pembaruan data
| Peristiwa | Deskripsi |
|---|---|
| ColumnChanging | Nilai dalam kolom sedang diubah. Acara meneruskan baris dan kolom kepada Anda, bersama dengan nilai yang diusulkan. |
| ColumnChanged | Nilai dalam kolom telah diubah. Acara meneruskan baris dan kolom kepada Anda, beserta nilai yang diusulkan. |
| RowChanging | Perubahan yang dilakukan pada DataRow objek akan diterapkan kembali ke dalam himpunan data. Jika Anda belum memanggil metode BeginEdit, event RowChanging akan dinaikkan untuk setiap perubahan kolom segera setelah event ColumnChanging dinaikkan. Jika Anda memanggil BeginEdit sebelum membuat perubahan, event RowChanging hanya dipicu saat Anda memanggil metode EndEdit. Acara meneruskan baris kepada Anda, dengan nilai yang menunjukkan jenis tindakan apa (ubah, sisipkan, dan sebagainya) yang dilakukan. |
| RowChanged | Satu baris telah diubah. Event meneruskan baris kepada Anda, bersama dengan nilai yang menunjukkan jenis tindakan (ubah, sisipkan, dan sebagainya) yang dilakukan. |
| RowDeleting | Baris sedang dihapus. Peristiwa meneruskan baris kepada Anda, bersama dengan nilai yang menunjukkan jenis tindakan yang sedang dilakukan, seperti penghapusan. |
| RowDeleted | Baris telah dihapus. Event meneruskan baris ke Anda, bersama dengan nilai yang menunjukkan jenis tindakan penghapusan yang sedang dilakukan. |
Peristiwa ColumnChanging, RowChanging, dan RowDeleting dimunculkan selama proses pembaruan. Anda dapat menggunakan peristiwa ini untuk memvalidasi data atau melakukan jenis pemrosesan lainnya. Karena pembaruan sedang dalam proses selama peristiwa ini, Anda dapat membatalkannya dengan melemparkan pengecualian, yang mencegah pembaruan selesai.
Peristiwa ColumnChanged, RowChanged dan RowDeleted adalah peristiwa pemberitahuan yang dimunculkan ketika pembaruan telah berhasil diselesaikan. Peristiwa ini berguna ketika Anda ingin mengambil tindakan lebih lanjut berdasarkan pembaruan yang berhasil.
Memvalidasi data selama perubahan kolom
Nota
Perancang Himpunan Data membuat kelas parsial di mana logika validasi dapat ditambahkan ke himpunan data. Himpunan data yang dihasilkan desainer tidak menghapus atau mengubah kode apa pun di kelas parsial.
Anda dapat memvalidasi data saat nilai dalam kolom data berubah dengan merespons peristiwa tersebut ColumnChanging . Ketika diangkat, peristiwa ini memberikan parameter kejadian (ProposedValue) yang berisi nilai yang diusulkan untuk kolom saat ini. Berdasarkan konten e.ProposedValue, Anda dapat:
Terima nilai yang diusulkan dengan tidak melakukan apa-apa.
Tolak nilai yang diusulkan dengan mengatur kesalahan kolom (SetColumnError) dari dalam penanganan aktivitas yang mengubah kolom.
Secara opsional gunakan ErrorProvider kontrol untuk menampilkan pesan kesalahan kepada pengguna. Untuk informasi selengkapnya, lihat komponen ErrorProvider.
Validasi juga dapat dilakukan selama peristiwa RowChanging.
Memvalidasi data saat terjadi perubahan baris
Anda dapat menulis kode untuk memverifikasi bahwa setiap kolom yang ingin Anda validasi berisi data yang memenuhi persyaratan aplikasi Anda. Lakukan ini dengan mengatur kolom untuk menunjukkan bahwa kolom berisi kesalahan jika nilai yang diusulkan tidak dapat diterima. Contoh berikut mengatur kesalahan kolom saat Quantity kolom adalah 0 atau kurang. Penangan acara perubahan baris harus menyerupai contoh berikut.
Untuk memvalidasi data saat baris berubah (Visual Basic)
Buka himpunan data Anda di Perancang Himpunan Data. Untuk informasi selengkapnya, lihat Panduan: Membuat Himpunan Data di Perancang Himpunan Data.
Klik dua kali bilah judul tabel yang ingin Anda validasi. Tindakan ini secara otomatis membuat RowChanging handler acara DataTable dalam file kelas parsial himpunan data.
Petunjuk / Saran
Klik dua kali di sebelah kiri nama tabel untuk membuat penanganan aktivitas yang mengubah baris. Jika Anda mengklik dua kali nama tabel, Anda bisa mengeditnya.
Private Sub Order_DetailsDataTable_Order_DetailsRowChanging( ByVal sender As System.Object, ByVal e As Order_DetailsRowChangeEvent ) Handles Me.Order_DetailsRowChanging If CType(e.Row.Quantity, Short) <= 0 Then e.Row.SetColumnError("Quantity", "Quantity must be greater than 0") Else e.Row.SetColumnError("Quantity", "") End If End Sub
Untuk memvalidasi data saat baris berubah (C#)
Buka himpunan data Anda di Perancang Himpunan Data. Untuk informasi selengkapnya, lihat Panduan: Membuat himpunan data di Perancang Himpunan Data.
Klik dua kali bilah judul tabel yang ingin Anda validasi. Tindakan ini membuat file kelas parsial untuk DataTable.
Nota
Perancang Himpunan Data tidak secara otomatis membuat penanganan aktivitas untuk peristiwa tersebutRowChanging. Anda harus membuat metode untuk menangani RowChanging peristiwa, dan menjalankan kode untuk menghubungkan peristiwa dalam metode inisialisasi tabel.
Salin kode berikut ke dalam kelas parsial:
public override void EndInit() { base.EndInit(); Order_DetailsRowChanging += TestRowChangeEvent; } public void TestRowChangeEvent(object sender, Order_DetailsRowChangeEvent e) { if ((short)e.Row.Quantity <= 0) { e.Row.SetColumnError("Quantity", "Quantity must be greater than 0"); } else { e.Row.SetColumnError("Quantity", ""); } }
Untuk mengambil baris yang diubah
Setiap baris dalam tabel data memiliki RowState properti yang melacak status baris tersebut saat ini dengan menggunakan nilai dalam DataRowState enumerasi. Anda dapat mengembalikan baris yang diubah dari himpunan data atau tabel data dengan memanggil GetChanges metode DataSet atau DataTable. Anda dapat memverifikasi bahwa perubahan ada sebelum memanggil GetChanges dengan memanggil HasChanges metode himpunan data.
Nota
Setelah Anda menerapkan perubahan pada himpunan AcceptChanges data atau tabel data (dengan memanggil metode ), GetChanges metode tidak mengembalikan data. Jika aplikasi Anda perlu memproses baris yang diubah, Anda harus memproses perubahan sebelum memanggil AcceptChanges metode .
Memanggil metode himpunan GetChanges data atau tabel data mengembalikan himpunan data atau tabel data baru yang hanya berisi rekaman yang telah diubah. Jika Anda ingin mendapatkan rekaman tertentu — misalnya, hanya rekaman baru atau hanya rekaman yang dimodifikasi — Anda dapat meneruskan nilai dari DataRowState enumerasi sebagai parameter ke GetChanges metode .
DataRowVersion Gunakan enumerasi untuk mengakses versi baris yang berbeda (misalnya, nilai asli yang berada dalam baris sebelum memprosesnya).
Untuk mendapatkan semua rekaman yang diubah dari himpunan data
GetChanges Panggil metode himpunan data.
Contoh berikut membuat himpunan data baru yang disebut
changedRecordsdan mengisinya dengan semua rekaman yang diubah dari himpunan data lain yang disebutdataSet1.
Untuk mendapatkan semua rekaman yang diubah dari tabel data
Panggil metode GetChanges pada DataTable.
Contoh berikut membuat tabel data baru yang disebut
changedRecordsTabledan mengisinya dengan semua rekaman yang diubah dari tabel data lain yang disebutdataTable1.
Untuk mendapatkan semua rekaman yang memiliki status baris tertentu
Panggil metode himpunan
GetChangesdata atau tabel data dan berikan DataRowState nilai enumerasi sebagai argumen.Contoh berikut menunjukkan cara membuat himpunan data baru yang disebut
addedRecordsdan mengisinya hanya dengan rekaman yang telah ditambahkan ke himpunandataSet1data.Contoh berikut menunjukkan cara mengembalikan semua rekaman yang baru ditambahkan ke
Customerstabel:
Akses versi asli dari sebuah DataRow
Saat perubahan dilakukan pada baris data, himpunan data mempertahankan versi baris asli (Original) dan baru (Current). Misalnya, sebelum memanggil AcceptChanges metode , aplikasi Anda dapat mengakses berbagai versi rekaman (seperti yang didefinisikan dalam DataRowVersion enumerasi) dan memproses perubahan yang sesuai.
Nota
Versi baris yang berbeda hanya ada setelah diedit dan sebelum AcceptChanges metode dipanggil. Setelah metode AcceptChanges dipanggil, versi saat ini dan aslinya adalah sama.
Dengan meneruskan DataRowVersion bersama dengan indeks kolom (atau nama kolom sebagai string) akan mengembalikan nilai dari versi baris tertentu dari kolom tersebut. Kolom yang diubah diidentifikasi selama peristiwa-peristiwa ColumnChanging dan ColumnChanged. Ini adalah waktu yang tepat untuk memeriksa versi baris yang berbeda untuk tujuan validasi. Namun, jika Anda telah menangguhkan sementara batasan, peristiwa tersebut tidak akan dijalankan, dan Anda harus mengidentifikasi kolom mana yang telah berubah melalui pemrograman. Anda dapat melakukan ini dengan melakukan iterasi pada koleksi Columns dan membandingkan nilai DataRowVersion yang berbeda.
Untuk mendapatkan versi asli rekaman
Akses nilai kolom dengan meneruskan DataRowVersion baris yang ingin Anda kembalikan.
Contoh berikut menunjukkan cara menggunakan nilai DataRowVersion untuk mendapatkan nilai asli bidang
CompanyNamedalam DataRow:
Mengakses versi DataRow saat ini
Untuk mendapatkan versi rekaman saat ini
Akses nilai kolom, lalu tambahkan parameter ke indeks yang menunjukkan versi baris mana yang ingin Anda kembalikan.
Contoh berikut menunjukkan cara menggunakan nilai DataRowVersion untuk mendapatkan nilai saat ini dari bidang
CompanyNamedalam DataRow: