Arsitektur Komponen BindingSource

Dengan komponen BindingSource, Anda dapat mengikat semua kontrol Windows Forms secara universal ke sumber data.

Komponen BindingSource menyederhanakan proses kontrol pengikatan ke sumber data dan memberikan keuntungan berikut daripada pengikatan data tradisional:

  • Memungkinkan pengikatan waktu desain ke objek bisnis.

  • Merangkum fungsionalitas CurrencyManager dan mengekspos peristiwa CurrencyManager saat proses desain.

  • Menyederhanakan pembuatan daftar yang mendukung antarmuka IBindingList dengan memberikan pemberitahuan perubahan daftar untuk sumber data yang tidak mendukung pemberitahuan perubahan daftar secara asli.

  • Menyediakan titik ekstensibilitas untuk metode IBindingList.AddNew.

  • Menyediakan tingkat tidak langsung antara sumber data dan kontrol. Proses tidak langsung ini penting ketika sumber data dapat berubah pada waktu eksekusi.

  • Berinteroperasi dengan kontrol Windows Forms terkait data lainnya, khususnya kontrol BindingNavigator dan DataGridView.

Untuk alasan ini, komponen BindingSource adalah cara yang disukai untuk mengikat kontrol Windows Forms Anda ke sumber data.

Fitur BindingSource

Komponen BindingSource menyediakan beberapa fitur untuk mengikat kontrol ke data. Dengan fitur-fitur ini, Anda dapat menerapkan sebagian besar skenario pengikatan data dengan hampir tanpa pengodean di bagian Anda.

Komponen BindingSource menyelesaikan ini dengan menyediakan antarmuka yang konsisten untuk mengakses berbagai jenis sumber data. Ini berarti Anda menggunakan prosedur yang sama untuk mengikat ke jenis apa pun. Misalnya, Anda dapat melampirkan properti DataSource ke DataSet atau ke objek bisnis dan dalam kedua kasus Anda menggunakan sekumpulan properti, metode, dan peristiwa yang sama untuk memanipulasi sumber data.

Antarmuka konsisten yang disediakan oleh komponen BindingSource sangat menyederhanakan proses pengikatan data ke kontrol. Untuk jenis sumber data yang menyediakan pemberitahuan perubahan, komponen BindingSource secara otomatis mengkomunikasikan perubahan antara kontrol dan sumber data. Untuk jenis sumber data yang tidak memberikan pemberitahuan perubahan, peristiwa disediakan yang memungkinkan Anda menaikkan pemberitahuan perubahan. Daftar berikut ini memperlihatkan fitur yang didukung oleh komponen BindingSource:

Tidak langsung

Komponen BindingSource menyediakan tingkat tidak langsung antara kontrol dan sumber data. Alih-alih mengikat kontrol langsung ke sumber data, Anda mengikat kontrol ke BindingSource, dan Anda melampirkan sumber data ke properti BindingSource komponen DataSource.

Dengan tingkat tidak langsung ini, Anda dapat mengubah sumber data tanpa mengatur ulang pengikatan kontrol. Ini memberi Anda kemampuan berikut:

Manajemen Mata Uang

Komponen BindingSource mengimplementasikan antarmuka ICurrencyManagerProvider untuk menangani manajemen mata uang untuk Anda. Dengan antarmuka ICurrencyManagerProvider, Anda juga dapat mengakses manajer mata uang untuk BindingSource, selain manajer mata uang untuk BindingSource lain yang terikat ke DataMemberyang sama.

Komponen BindingSource merangkum fungsionalitas CurrencyManager dan mengekspos properti dan peristiwa CurrencyManager yang paling umum. Tabel berikut ini menjelaskan beberapa anggota yang terkait dengan manajemen mata uang.

CurrencyManager properti Mendapatkan manajer mata uang yang terkait dengan BindingSource.

GetRelatedCurrencyManager Metode Jika ada objek lain yang terikat pada BindingSource anggota data yang ditentukan, mendapatkan pengelola mata uang.

Current properti Mendapatkan item sumber data saat ini.

Position properti Mendapatkan atau mengatur posisi saat ini dalam daftar yang mendasar.

EndEdit metode menerapkan perubahan tertunda ke sumber data dasar.

CancelEdit metode Membatalkan operasi edit saat ini.

Sumber Data sebagai Daftar

Komponen BindingSource mengimplementasikan antarmuka IBindingListView dan ITypedList. Dengan implementasi ini, Anda dapat menggunakan komponen BindingSource itu sendiri sebagai sumber data, tanpa penyimpanan eksternal apa pun.

Saat komponen BindingSource dilampirkan ke sumber data, komponen tersebut mengekspos sumber data sebagai daftar.

Properti DataSource dapat diatur untuk beberapa sumber data. Ini termasuk jenis, objek, serta daftar jenis. Sumber data yang dihasilkan akan diekspos sebagai daftar. Tabel berikut ini memperlihatkan beberapa sumber data umum dan evaluasi daftar yang dihasilkan.

Properti DataSource Daftar hasil
Referensi nol (Nothing di Visual Basic) IBindingList objek kosong. Menambahkan item mengatur daftar ke tipe item yang ditambahkan.
Referensi null (Nothing di Visual Basic) dengan nilai DataMember ditetapkan Tidak didukung; meningkatkan ArgumentException.
Jenis non-daftar atau objek jenis "T" IBindingList kosong bertipe "T".
Instans array Sebuah IBindingList yang berisi elemen array.
IEnumerable instans IBindingList yang berisi item IEnumerable
Daftar instans yang mengandung tipe "T" Instance IBindingList yang mengandung tipe "T".

Selain itu, DataSource dapat diatur ke jenis daftar lain, seperti IListSource dan ITypedList, dan BindingSource akan menanganinya dengan tepat. Dalam hal ini, jenis yang terkandung dalam daftar harus memiliki konstruktor tanpa parameter.

BindingSource sebagai dari IBindingList

Komponen BindingSource menyediakan anggota untuk mengakses dan memanipulasi data dasar sebagai sebuah IBindingList. Tabel berikut ini menjelaskan beberapa anggota ini.

Anggota Deskripsi
List Properti Mendapatkan daftar yang dihasilkan dari evaluasi properti DataSource atau DataMember.
metode AddNew Menambahkan item baru ke daftar dasar. Berlaku untuk sumber data yang mengimplementasikan antarmuka IBindingList dan memungkinkan penambahan item (yaitu, properti AllowNew diatur ke true).

Pembuatan Item Kustom

Anda dapat menangani peristiwa AddingNew untuk menyediakan logika pembuatan item Anda sendiri. Peristiwa AddingNew terjadi sebelum objek baru ditambahkan ke BindingSource. Kejadian ini dimunculkan setelah metode AddNew dipanggil, tetapi sebelum item baru ditambahkan ke dalam daftar dasar. Dengan menangani peristiwa ini, Anda dapat memberikan perilaku pembuatan item kustom tanpa berasal dari kelas BindingSource. Untuk informasi selengkapnya, lihat Cara: Menyesuaikan Penambahan Item dengan Windows Forms BindingSource.

Pembuatan Item Transaksional

Komponen BindingSource mengimplementasikan antarmuka ICancelAddNew, yang memungkinkan pembuatan item transaksi. Setelah item baru dibuat secara provisi dengan menggunakan panggilan ke AddNew, penambahan dapat diterapkan atau digulung balik dengan cara berikut:

  • Metode EndNew akan secara eksplisit mengkonfirmasi penambahan yang tertunda.

  • Melakukan operasi pengumpulan lain, seperti penyisipan, penghapusan, atau pemindahan, akan secara otomatis melaksanakan penambahan yang tertunda.

  • Metode CancelNew akan mengembalikan penambahan yang tertunda jika metode belum diterapkan.

Dukungan IEnumerable

Komponen BindingSource memungkinkan mengikat kontrol ke sumber data IEnumerable. Dengan komponen ini, Anda dapat mengikat ke sumber data seperti System.Data.SqlClient.SqlDataReader.

Saat sumber data IEnumerable ditetapkan ke komponen BindingSource, BindingSource membuat IBindingList dan menambahkan konten sumber data IEnumerable ke daftar.

Dukungan Design-Time

Beberapa jenis objek tidak dapat dibuat pada waktu desain, seperti objek yang dibuat dari kelas pabrik, atau objek yang dikembalikan oleh layanan Web. Terkadang Anda perlu mengaitkan kontrol Anda ke tipe-tipe ini pada saat desain, meskipun tidak ada objek dalam memori yang dapat diikatkan ke kontrol Anda. Anda mungkin, misalnya, perlu memberi label tajuk kolom dari kontrol DataGridView dengan nama properti publik dari tipe khusus Anda.

Untuk mendukung skenario ini, komponen BindingSource mendukung pengikatan ke Type. Saat Anda menetapkan Type ke properti DataSource, komponen BindingSource membuat BindingList<T> kosong dari item Type. Kontrol apa pun yang kemudian Anda ikat ke komponen BindingSource akan diperingatkan tentang keberadaan properti atau skema jenis Anda pada waktu desain, atau pada waktu proses. Untuk informasi selengkapnya, lihat Cara: Mengikat Kontrol Formulir Windows ke Tipe.

Metode Statis ListBindingHelper

Jenis System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManager, dan BindingSource semuanya berbagi logika umum untuk menghasilkan daftar dari pasangan DataSource/DataMember. Selain itu, logika umum ini diekspos secara publik untuk digunakan oleh penulis kontrol dan pihak ketiga lainnya dalam metode static berikut:

Mengurutkan dan Memfilter dengan Antarmuka IBindingListView

Komponen BindingSource mengimplementasikan antarmuka IBindingListView, yang memperluas antarmuka IBindingList. IBindingList menawarkan pengurutan kolom tunggal dan IBindingListView menawarkan pengurutan dan pemfilteran tingkat lanjut. Dengan IBindingListView, Anda dapat mengurutkan dan memfilter item di sumber data, jika sumber data juga mengimplementasikan salah satu antarmuka ini. Komponen BindingSource tidak menyediakan implementasi referensi untuk anggota-anggota ini. Sebagai gantinya, panggilan diteruskan ke daftar dasar.

Tabel berikut ini menjelaskan properti yang Anda gunakan untuk pengurutan dan pemfilteran.

Anggota Deskripsi
Filter Properti Jika sumber data adalah IBindingListView, mendapatkan atau mengatur ekspresi yang digunakan untuk memfilter baris mana yang ditampilkan.
Sort Properti Jika sumber data adalah IBindingList, dapatkan atau atur nama kolom yang digunakan untuk mengurutkan dan informasi urutan pengurutan.

-atau-

Jika sumber data adalah IBindingListView dan mendukung pengurutan tingkat lanjut, mengambil beberapa nama kolom yang digunakan untuk pengurutan serta urutan pengurutannya.

Integrasi dengan BindingNavigator

Anda dapat menggunakan komponen BindingSource untuk mengikat kontrol Formulir Windows apa pun ke sumber data, tetapi kontrol BindingNavigator dirancang khusus untuk bekerja dengan komponen BindingSource. Kontrol BindingNavigator menyediakan antarmuka pengguna untuk mengontrol item komponen BindingSource saat ini. Secara default, kontrol BindingNavigator menyediakan tombol yang sesuai dengan metode navigasi pada komponen BindingSource. Untuk informasi selengkapnya, lihat Cara: Menavigasi Data dengan Kontrol BindingNavigator di Windows Forms.

Lihat juga