Bagikan melalui


Mengikat objek sebagai sumber data dalam aplikasi .NET Framework menggunakan Visual Studio

Catatan

Himpunan data 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. Himpunan data tersebut sangat berguna untuk aplikasi yang mengaktifkan pengguna guna memodifikasi data dan mempertahankan perubahan kembali ke database. Meskipun himpunan data telah terbukti menjadi teknologi yang sangat sukses, sebaiknya aplikasi .NET baru 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.

Visual Studio menyediakan alat waktu desain untuk bekerja dengan objek kustom sebagai sumber data di aplikasi Anda. Saat Anda ingin menyimpan data dari database di objek yang Anda ikat ke kontrol UI, pendekatan yang direkomendasikan adalah menggunakan Entity Framework untuk membuat kelas. Entity Framework secara otomatis membuat semua kode pelacakan perubahan boilerplate, yang berarti bahwa perubahan pada objek lokal secara otomatis disimpan ke database saat Anda memanggil AcceptChanges pada objek DbSet. Untuk informasi selengkapnya, lihat Dokumentasi Entity Framework.

Tip

Pendekatan untuk pengikatan objek di artikel ini dipertimbangkan hanya jika aplikasi Anda sudah didasarkan pada himpunan data. Anda juga dapat menggunakan pendekatan ini jika Anda sudah memahami himpunan data, dan data yang akan Anda proses bersifat tabular dan tidak terlalu kompleks atau terlalu besar. Untuk contoh yang lebih sederhana, melibatkan pemuatan data secara langsung ke objek dengan menggunakan DataReader dan memperbarui antarmuka pengguna secara manual tanpa pengikatan data, lihat Membuat aplikasi data sederhana dengan menggunakan ADO.NET.

Persyaratan objek

Satu-satunya persyaratan bagi objek kustom untuk bekerja dengan alat desain data di Visual Studio adalah bahwa objek memerlukan setidaknya satu properti publik.

Umumnya, objek kustom tidak memerlukan antarmuka, konstruktor, atau atribut tertentu untuk bertindak sebagai sumber data bagi aplikasi. Akan tetapi, jika Anda ingin menarik objek dari jendela Sumber Data ke permukaan desain untuk membuat kontrol terikat data, dan jika objek menerapkan antarmuka ITypedList atau IListSource, objek harus memiliki konstruktor default. Jika tidak, Visual Studio tidak dapat membuat instans objek sumber data, dan menampilkan kesalahan saat Anda menarik item ke permukaan desain.

Contoh penggunaan objek kustom sebagai sumber data

Meski ada banyak cara untuk menerapkan logika aplikasi Anda saat bekerja dengan objek sebagai sumber data, untuk database SQL ada beberapa operasi standar yang dapat disederhanakan dengan menggunakan objek TableAdapter yang dibuat oleh Visual Studio. Halaman ini menjelaskan cara menerapkan proses standar ini menggunakan TableAdapters. Ini tidak dimaksudkan sebagai panduan untuk membuat objek kustom Anda. Misalnya, Anda biasanya akan melakukan operasi standar berikut apa pun implementasi spesifik objek Anda, atau logika aplikasi:

  • Memuat data ke dalam objek (biasanya dari database).

  • Membuat kumpulan objek yang berjenis.

  • Menambahkan objek ke dan menghapus objek dari koleksi.

  • Menampilkan data objek kepada pengguna pada formulir.

  • Mengubah/mengedit data dalam objek.

  • Menyimpan data dari objek kembali ke database.

Memuat data ke dalam objek

Untuk contoh ini, Anda memuat data ke dalam objek Anda dengan menggunakan TableAdapters. Secara default, TableAdapters dibuat dengan dua jenis metode yang mengambil data dari database dan mengisi tabel data.

  • Metode TableAdapter.Fill mengisi tabel data yang sudah ada dengan data yang ditampilkan.

  • Metode TableAdapter.GetData menampilkan tabel data baru yang diisi dengan data.

Cara termudah untuk memuat objek kustom Anda dengan data adalah dengan memanggil metode TableAdapter.GetData, memproses kumpulan baris dalam tabel data yang ditampilkan, dan mengisi tiap objek dengan nilai di tiap baris. Anda dapat membuat metode GetData yang menampilkan tabel data yang diisi untuk kueri yang ditambahkan ke TableAdapter.

Catatan

Visual Studio memberi nama kueri TableAdapter Fill dan GetData secara default, tetapi Anda dapat mengubah nama tersebut menjadi nama metode yang valid.

Contoh berikut menunjukkan cara memproses baris dalam tabel data, dan mengisi objek dengan data:

private void LoadCustomers()
{
    NorthwindDataSet.CustomersDataTable customerData = 
        customersTableAdapter1.GetTop5Customers();
    
    foreach (NorthwindDataSet.CustomersRow customerRow in customerData)
    {
        Customer currentCustomer = new Customer();
        currentCustomer.CustomerID = customerRow.CustomerID;
        currentCustomer.CompanyName = customerRow.CompanyName;

        if (customerRow.IsAddressNull() == false)
        {
            currentCustomer.Address = customerRow.Address;
        }

        if (customerRow.IsCityNull() == false)
        {
            currentCustomer.City = customerRow.City;
        }

        if (customerRow.IsContactNameNull() == false)
        {
            currentCustomer.ContactName = customerRow.ContactName;
        }

        if (customerRow.IsContactTitleNull() == false)
        {
            currentCustomer.ContactTitle = customerRow.ContactTitle;
        }

        if (customerRow.IsCountryNull() == false)
        {
            currentCustomer.Country = customerRow.Country;
        }

        if (customerRow.IsFaxNull() == false)
        {
            currentCustomer.Fax = customerRow.Fax;
        }

        if (customerRow.IsPhoneNull() == false)
        {
            currentCustomer.Phone = customerRow.Phone;
        }

        if (customerRow.IsPostalCodeNull() == false)
        {
            currentCustomer.PostalCode = customerRow.PostalCode;
        }

        if (customerRow.IsRegionNull() == false)
        {
            currentCustomer.Region = customerRow.Region;
        }

        LoadOrders(currentCustomer);
        customerBindingSource.Add(currentCustomer);
    }
}

Membuat kumpulan objek yang berjenis

Anda dapat membuat kelas kumpulan untuk objek Anda, atau menggunakan kumpulan berjenis yang secara otomatis disediakan oleh komponen BindingSource.

Saat Anda membuat kelas kumpulan kustom untuk objek, kami menyarankan Anda mewarisi dari BindingList<T>. Kelas generik ini menyediakan fungsi untuk mengelola kumpulan Anda, serta kemampuan untuk memunculkan peristiwa yang mengirimkan pemberitahuan ke infrastruktur pengikatan data di Formulir Windows.

Kumpulan yang dihasilkan secara otomatis dalam BindingSource menggunakan BindingList<T> untuk kumpulannya yang berjenis. Jika aplikasi Anda tidak memerlukan fungsi tambahan, Anda dapat mempertahankan kumpulan Anda dalam BindingSource. Untuk informasi selengkapnya, lihat properti List kelas BindingSource.

Catatan

Jika kumpulan Anda memerlukan fungsi yang tidak disediakan oleh implementasi dasar BindingList<T>, Anda harus membuat kumpulan kustom agar Anda dapat menambahkan ke kelas sesuai kebutuhan.

Kode berikut menunjukkan cara membuat kelas untuk kumpulan Order objek yang berjenis kuat:

/// <summary>
/// A collection of Orders
/// </summary>
public class Orders: System.ComponentModel.BindingList<Order>
{
    // Add any additional functionality required by your collection.
}

Menambahkan objek ke kumpulan

Anda menambahkan objek ke kumpulan dengan memanggil metode Add kelas kumpulan kustom Anda atau BindingSource.

Catatan

Metode Add ini secara otomatis disediakan untuk kumpulan kustom Anda saat Anda mewarisi dari BindingList<T>.

Kode berikut menunjukkan cara menambahkan objek ke kumpulan yang berjenis di BindingSource:

Customer currentCustomer = new Customer();
customerBindingSource.Add(currentCustomer);

Kode berikut menunjukkan cara menambahkan objek ke kumpulan yang berjenis yang mewarisi dari BindingList<T>:

Catatan

Di contoh ini, kumpulan Orders adalah properti objek Customer.

Order currentOrder = new Order();
currentCustomer.Orders.Add(currentOrder);

Menghapus objek dari kumpulan

Anda menghapus objek dari kumpulan dengan memanggil metode Remove atau RemoveAt dari kelas kumpulan kustom Anda atau BindingSource.

Catatan

Metode Remove dan RemoveAt ni secara otomatis disediakan untuk kumpulan kustom Anda saat Anda mewarisi dari BindingList<T>.

Kode berikut menunjukkan cara mencari dan menghapus objek dari kumpulan yang berjenis dalam BindingSource dengan metode RemoveAt:

int customerIndex = customerBindingSource.Find("CustomerID", "ALFKI");
customerBindingSource.RemoveAt(customerIndex);

Menampilkan data objek kepada pengguna

Untuk menampilkan data dalam objek kepada pengguna, buat sumber data objek menggunakan wizard Konfigurasi Sumber Data, dan kemudian tarik seluruh objek atau properti satu per satu ke formulir Anda dari jendela Sumber Data.

Mengubah data dalam objek

Untuk mengedit data dalam objek kustom yang terikat data ke kontrol Formulir Windows, cukup edit data dalam kontrol terikat (atau langsung di properti objek). Arsitektur pengikatan data memperbarui data dalam objek.

Jika aplikasi Anda memerlukan pelacakan perubahan dan gulung balik perubahan yang diusulkan ke nilai asalnya, maka Anda harus menerapkan fungsi ini dalam model objek Anda. Untuk contoh cara tabel data memantau perubahan yang diusulkan, lihat DataRowState, HasChanges, dan GetChanges.

Menyimpan data dalam objek kembali ke database

Simpan data kembali ke database dengan meneruskan nilai dari objek Anda ke metode DBDirect TableAdapter.

Visual Studio membuat metode DBDirect yang dapat dijalankan secara langsung terhadap database. Metode ini tidak memerlukan objek Himpunan Data atau TabelData.

Metode DBDirect TableAdapter Deskripsi
TableAdapter.Insert Menambahkan rekaman baru ke database, memungkinkan Anda meneruskan nilai kolom satu per satu sebagai parameter metode.
TableAdapter.Update Memperbarui rekaman yang sudah ada dalam database. Metode Pembaruan mengambil nilai kolom asal dan baru sebagai parameter metode. Nilai asal digunakan untuk mencari rekaman asal, dan nilai baru digunakan untuk memperbarui rekaman tersebut.

Metode TableAdapter.Update ini juga digunakan untuk menyesuaikan perubahan dalam himpunan data kembali ke database, dengan mengambil DataSet, DataTable, DataRow, atau array DataRow sebagai parameter metode.
TableAdapter.Delete Menghapus rekaman yang sudah ada dari database berdasarkan nilai kolom asal yang diteruskan sebagai parameter metode.

Untuk menyimpan data dari kumpulan objek, proses kumpulan objek (misalnya, menggunakan perulangan untuk berikutnya). Kirim nilai untuk tiap objek ke database dengan menggunakan metode DBDirect TableAdapter.

Contoh berikut menunjukkan cara menggunakan TableAdapter.Insert metode DBDirect untuk menambahkan pelanggan baru secara langsung ke database:

private void AddNewCustomers(Customer currentCustomer)
{
    customersTableAdapter.Insert( 
        currentCustomer.CustomerID, 
        currentCustomer.CompanyName, 
        currentCustomer.ContactName, 
        currentCustomer.ContactTitle, 
        currentCustomer.Address, 
        currentCustomer.City, 
        currentCustomer.Region, 
        currentCustomer.PostalCode, 
        currentCustomer.Country, 
        currentCustomer.Phone, 
        currentCustomer.Fax);
}