Tuesday, December 13, 2016

Bab 3: Pemrograman C#.NET: Database dan Web




Aplikasi Database



Bab ini akan fokus pada pemrograman database, menggunakan pustaka ADO.NET, yang merupakan bagian dari .NET Framework. Anda dapat menganggap pustakan ini sebagai ekstensi dari konsep-konsep database dan pengikatan database. Di sini, Anda akan mengintegrasikan pengetahuan Anda tentang perancangan aplikasi multi-tingkat dengan objek dan database.


3.1 Menciptakan Database
Server Explorer
Jendela Server Explorer pada Visual Studio dapat Anda pakai untuk melihat dan mengelola koneksi-koneksi ke database lokal maupun database remote. Dari menu VIEW, pilih Other Windows, kemudian pilih Server Explorer, untuk membuka jendela ini. Pada Gambar 3.1, jendela Server Explorer memuat sebuah koneksi ke database ProdukDB.mdf yang telah digunakan pada Bab 2. Sebuah koneksi adalah suatu cara untuk terhubung ke database sehingg Anda dapat memodifikasi perancangan dan data di dalamnya. Setiap folder pada suatu koneksi memuat sejumlah tipe objek yang berkaitan dengan database, sebagai berikut:
·         Folder Tables yang memuat semua tabel di dalam database.
·      Folder Views yang memuat sejumlah view, yang merupakan cara-cara alternatif dalam melihat isi tabel; view sering mengkombinasikan kolom-kolom dari sejumlah tabel yang berbeda ke dalam tabel-tabel baru.
·        Tabel Stored Procedures memuat query-query SQL terkompilasi.


Untuk menambahkan sebuah file database pada jendela Server Explorer, klik kanan pada Data Connections, pilih Add Connection, dan cari lokasi file. (Server Explorer juga dapat Anda pakai untuk terhubung ke versi lengkap dari SQL Server, baik pada mesin lokal maupun pada lokasi jaringan). Anda dapat menambahkan sejumlah koneksi database pada jendela Server Explorer. Jendela ini tetap mempertahankan semua koneksi yang telah Anda ciptakan ketika projek-projek lain dibuka. Anda dapat menampilkan jendela ini ketika projek dibuka atau tidak.

Gambar 3.1 Jendela Server Explorer, yang terhubung ke database ProdukDB.mdf


Menciptakan Database Baru
Anda dapat menciptakan sebuah database baru pada jendela Server Explorer. Berikut simpulan dasar dari perintah-perintah dasar yang Anda akan gunakan:

  1. Buka jendela Server Explorer, klik kanan pada Data Connections, dan pilih Create New SQL Server Database.
  2. Untuk menambahkan sebuah tabel pada database yang telah ada, klik kanan pada folder Tables di bawah nama database dan pilih Add New Table.
  3. Untuk menyisipkan data ke dalam tabel yang telah ada, klik kanan pada nama tabel dan pilih Show Table Data.
  4. Untuk memodifikasi struktur tabel (disebut dengan skema), klik kanan pada nama tabel dan pilih Open Table Definition.
  5. Untuk mengganti nama tabel, klik kanan pada namanya dan pilih Rename dari menu yang tertampil.

Pada Tutorial 3.1, Anda akan menciptakan sebuah database yang akan dipakai pada bab ini.

Tutorial 3.1: Menciptakan Sebuah Database SQL Server
Para pemilik rumah selalu punya kebutuhan untuk memperbaiki apa saja di rumahnya, dan banyak perusahaan yang menawarkan sejumlah layaran perbaikan rumah. Pengelolaan jadwal perbaikan merupakan pekerjaan umum untuk perusahaan semacam itu, karena mereka secara kontinyu memperbarui daftar pelanggannya dan penjadwalan layanan. Perusahaan juga menawaran pelbagai jenis perbaikan. Oleh karena itu, versi terbatas dari database perusahaan semacam itu mencakup tabel Konsumen, tabel JenisPertukangan, dan tabel Jadwal. Tabel Konsumen akan menjejak informasi konsumer seperti ID, nama, dan telepon. Tabel JenisPertukangan akan memuat deskripsi dari tiap jenis layanan. Tabel Jadwal akan memuat informasi tentang jenis layanan yang sedang dikerjakan, deskripsi perbaikan, persyaratan lisensi, ID konsumen, dan tanggal/waktu jadwal. Nanti pada bab ini, Anda akan menciptakan sebuah aplikasi yang menampilkan informasi ini. Pada tutorial ini, Anda akan menciptakan database, menambahkan sebuah tabel Konsumen, dan mendefinisikan DataSet yeng memuat table adapter yang terkoneksi dengan database. Terakhir, Anda akan menampilkan tabel Konsumen pada sebuah kontrol DataGridView.


Gambar 3.2 Menciptakan sebuah database baru pada Server Explorer


Langkah-Langkah Tutorial
Langkah 1: Ciptakanlah sebuah project Windows Forms Application dengan nama Layanan Pertukangan.

Langkah 2: Buka jendela Server Explorer. Kemudian klik kanan pada Data Connections dan pilih Create New SQL Server Database.

Langkah 3: Pada jendela dialog yang ditampilkan, pilih NamaKomputer\SQLEXPRESS dari nama Server. (Namakomputer adalah nama mesin dari komputer Anda). Kemudian, namai database sebagai LayananPertukangan. Contohnya ditampilkan pada Gambar 3.2. Klik OK untuk menutup jendela ini.

Langkah 4: Expansi entri-entri di bawah LayananPertukangan.dbo, yaitu entri di bawah Data Connections pada jendela Server Explorer. Klik kanan pada folder Tables dan pilih Add New Table. Ini akan menampilkan sebuah jendela editor tabel, seperti ditunjukkan pada Gambar 3.3.



Gambar 3.3 Menambahkan sebuah tabel pada database LayananPertukangan


Langkah 5: Klik di bawah kepala Column Name dan sisipkan kolom-kolom database seperti ditunjukkan pada Gambar 3.4. Klik kanan pada kolom IdKonsumen dan sisipkan Set Primary Key dari menu yang tertampil.

Gambar 3.4 Perancangan tabel Konsumen


Langkah 6: Tutup jendela designer dan simpan tabel. Ketika diminta sebuah nama, seperti pada Gambar 3.5, namai dengan Konsumen dan klik tombol OK untuk menyimpan nama tabel.

Gambar 3.5 Menamai tabel Konsumen


Langkah 7: Pad jendela Server Explorer, klik kanan pada tabel Konsumen dan pilih Show Table Data. Pada jendela yang ditampilkan, masukkan data seperti ditunjukkan pada Gambar 3.6.


Gambar 3.6 Baris-baris pada tabel Konsumen


Menciptakan Sebuah DataSet
Selanjutnya, Anda akan menciptakan sebuah dataset dengan nama LayananPertukanganDataSet.

Langkah 8: Buka jendela Data Sources dan tambahkan sebuah sumber data baru yang menghubungkan ke tabel Konsumen pada database Anda. Jika ada koneksi database yang telah ada, gunakan itu daripada menciptakan yang baru. Namai DataSet dengan LayananPertukanganDataSet.

Langkah 9: Pada Solution Explorer, buka file LayananPertukanganDataSet.xsd. Pada jendela designer, Anda akan melihat tabel Konsumen dan KonsumenTableAdapter. Selanjutnya, Anda akan menampilkan tabel Konsumen pada sebuah kontrol DataGridView, untuk memverifikasi bahwa sumber data telah diciptakan dengan benar.

Gambar 3.7 Menampilkan tabel Konsumen pada sebuah kontrol DataGridView


Langkah 10: Ganti nama form startup dari projek dengan nama FormKonsumen.cs.

Langkah 11: Buka jendela design untuk FormKonsumen dan tetapkan properti Text-nya menjadi Konsumen.

Langkah 12: Tambahkan sebuah kontrol DataGridView dengan nama dgvKonsumen pada form dan lekatkan tabel Konsumen pada LayananPerbaikanDataSet. Tetapkan properti Dock dari kontrol grid itu menjadi Fill, dan tetapkan properti-properti lain sesuai dengan keinginan Anda.

Langkah 13: Jalankan aplikasi. Tabel Konsumen akan ditampilkan seperti pada Gambar 3.7.



Tutorial 3.2: Menambahkan Tabel Jadwal Pada Database LayananPertukangan
Tentu database umumnya memiliki lebih dari satu tabel untuk merepresentasikan datanya. Pada tutorial ini, Anda akan menambahkan sebuah form Penjadwalan yang menampilkan jadwal-jadwal pada sebuah grid. Anda juga akan menambahkan sebuah tabel dengan nama Jadwal pada database LayananPertukangan. Tabel ini akan memuat informasi berikut tentang jadwal-jadwal perbaikan rumah:

·         IdJadwal: sebuah nomor ID unik.
·         IdJenis: mengidentifikasi jenis perbaikan yang dilakukan.
·         Deskripsi: sebuah deskripsi dari perbaikan.
·         Lisensi: bidang true/false yang mengindikasikan apakah tukang berlisensi yang diperlukan.
·         IdKonsumen: nomor ID konsumen.
·         Terjadwal: tanggal dan waktu kapan perbaikan dijadwalkan.

Langkah-Langkah Tutorial
Langkah 1: Buka projek Layanan Pertukangan dari Tutorial 3.1.

Langkah 2: Pada jendela Server Explorer, klik kanan pada folder Tables di bawah nama database dan pilih Add New Table. Tabel ini akan diberi nama Jadwal.

Langkah 3: Pada jendela editor, tambahkan kolom-kolom seperti ditunjukkan pada Gambar 3.8. Kemudian pilih kolom IdJadwal dan tetapkan properti Is Identity menjadi Yes pada panel bawah, seperti ditunjukkan pada Gambar 3.9. Tetapkan Identity Seed menjadi 1000, dan Identity Increment menjadi 1. Klik kanan pada kolom IdJadwal dan jadikan ia sebagai primary key. Tutup jendela dan simpan.

Gambar 3.8 Perancangan tabel Jadwal


Langkah 4: Pada jendela Server Explorer, klik kanan pada tabel Jadwal dan pilih Show Table Data. Kemudian masukkan data seperti ditunjukkan pada Gambar 3.10a.


Gambar 3.9 Spesifikasi identitas untuk kolom IdJadwal


Gambar 3.10a Isi dari tabel Jadwal


Langkah 5: Tambahkan tabel Jadwal pada LayananPertukanganDataSet dengan menggeretnya dari jendela Server Explorer ke jendela designer untuk LayananPertukanganDataSet.xsd, seperti ditunjukkan pada Gambar 3.10b berikut:

Gambar 3.10b Jendela editor dari file LayananPertukanganDataSet.xsd


Gambar 3.10c Isi dari tabel Jadwal


Langkah 6: Tambahkan form baru pada projek dengan nama FormJadwal.cs. Tetapkan properti Text-nya menjadi Jadwal. Tambahkan sebuah kontrol DataGridView dengan nama dgvJadwal pada form dan lekatkan pada tabel Jadwal di dalam LayananPertukanganDataSet. Tetapkan properti Dock menjadi Fill.

Langkah 7: Ubah startup form dari aplikasi menjadi FormJadwal.cs.

Langkah 8: Simpan projek dan jalankan aplikasi. Anda akan melihat tabel Jadwal pada sebuah kontrol DataGridView, seperti terlihat pada Gambar 3.10c. Tutup jendela aplikasi.



Tutorial 3.3: Menambahkan Tabel JenisPertukangan pada database LayananPertukangan
Pada tutorial ini, Anda akan menambahkan sebuah tabel baru dengan nama JenisPertukangan pada database LayananPertukangan. Tabel ini akan memuat sejumlah nomor ID yang menghubungkannya ke tabel Jadwal.

Langkah 1: Buka projek yang telah dibuat pada Tutorial 3.1 dan Tutorial 3.2.

Langkah 2: Pada jendela Server Explorer, klik kanan pada folder Tables di bawah nama database dan pilih Add New Table.

Langkah 3: Pada jendela New Table, namai tabel sebagai JenisPertukangan dan tambahkan kolom-kolom seperti ditunjukkan pada Tabel 3.1. Tutup jendela untuk menyimpan perubahan.

Tabel 3.1 Perancangan tabel JenisPertukangan


Langkah 4: Pada jendela Server Explorer, klik kanan pada tabel JenisPertukangan dan pilih Show Table Data. Kemudian masukkan data yang ditunjukkan pada Gambar 3.11.

Gambar 3.11 Isi dari tabel JenisPertukangan



Relasi One-to-Many
Relasi one-to-many dilakukan terhadap dua tabel database ketika kunci primer dari salah satu tabel terhubung ke sebuah kolom (atau yang dinamakan dengan kunci asing atau foreign key) pada tabel lain. Sebagai contoh, tabel Konsumen dan tabel Jadwal memiliki relasi seperti ditunjukkan pada Gambar 3.12.

Tanda tak-hingga di dekat kolom IdKonsumen pada tabel Jadwal mengimplikasikan bahwa ID konsumen dapat terjadi beberapa kali pada tabel ini. Ini merupakan sisi many dari relasi. Simbol kunci di sisi lain yang menyentuh tabel Konsumen mengindikasikan bahwa IdKonsumen merupakan kunci primer pada tabel itu. Ini merupakan sisi one dari relasi.

Ketika sebuah relasi one-to-meny terjadi antara dua tabel, tabel di sisi one disebut dengan tabel induk atau parent table. Tabel di sisi many disebut dengan tabel anak atau child table. Pada contoh ini, Konsumen adalah tabel induk dan  Jadwal adalah tabel anak.


Gambar 3.12 Relasi one-to-many antara tabel Konsumen dan tabel Jadwal


Relasi one-to-many berguna ketika aplikasi-aplikasi perlu mencari baris-baris tabel anak yang cocok dengan baris-baris pada sebuah tabel induk. Jika diberikan ID konsumen tertentu, misalnya, Anda dapat mencari semua jadwal yang berkaitan dengan konsumen ini. SQL Server juga dapat menggabungkan tabel-tabel, menggunakan kolom-kolom yang didefinisikan pada relasi one-to-many.


Kekangan Database
Kekangan database adalah sebuah aturan yang disisipkan ke dalam database oleh perancang database. Kekangan membantu menjaga integritas data dengan mencegah terjadinya error akibat kesalahan penyisipan, modifikasi, dan penghapusan data. Kekangan membantu para programer untuk menjaga dan memverifikasi integritas data. Daripada menyisipkan statemen-statemen validasi ke setiap aplikasi yang menggunakan database, adalah lebih efisien untuk menanamkan kekangan-kekangan ke dalam database.

Kekangan kunci primer mensyaratkan bahwa semua nilai pada sebuah kunci primer harus unik. Jika user mencoba menambahkan sebuah baris tabel yang memuat nilai kunci primer yang telah ada di dalam tabel, maka database akan memberitahu bahwa kekangan kunci primer dilanggar. Baris tidak akan ditambahkan ke dalam database. Sebagai contoh, jika Anda ingin menambahkan sebuah baris baru yang memuat IdKonsumen  = 103 pada tabel Konsumen, maka kekangan kunci primer telah dilanggar dan pesan seperti ditunjukkan pada Gambar 3.13 akan ditampilkan.

Kekangan pemeriksaan kolom adalah sebuah aturan yang mendefinisikan apakah data valid ketika menambahkan atau memperbarui sebuah entri di dalam suatu tabel. Kekangan ini diterapkan pada tiap baris tabel. Ia melibatkan satu atau lebih nilai kolom. Sebagai contoh, nilai-nilai yang ditugaskan pada sebuah kolom Gaji harus bernilai positif. Selain itu, tipe data dari data yang disisipkan harus sesuai dengan tipe data dari kolom-kolom tabel.


Gambar 3.13 Pelanggaran kekangan kunci primer


Kekangan kunci asing, diterapkan pada relasi antara dua tabel yang memiliki relasi one-to-many. Tabel induk disyaratkan memuat sebuah nilai kunci primer yang cocok dengan setiap nilai kunci asing pada tabel anak.

Pada Gambar 3.14, misalnya, Id konsumen 1020 ditampilkan dua kali pada tabel Jadwal (kolom IdKonsumen). Dimisalkan bahwa sebuah aplikasi memperbarui tabel Konsumen, yang mengubah 1020 menjadi 1022. Jika tidak ada kekangan yang dilakukan, tabel Jadwal akan memuat dua (atau lebih) baris yang tidak lagi terhubung ke tabel Konsumen. Akibatnya, baris-baris itu menjadi baris-baris yatim. Pada database yang besar, error semacam itu bisa jadi tidak terdeteksi dan menyebabkan permasalahan integritas data. Sama halnya, jika konsumen 1020 dihapus dari tabel Konsumen, maka semua baris pada tabel Jadwal yang memuat IdKonsumen 1020 akan menjadi baris yatim.


Gambar 3.14 Tabel Konsumen dan tabel Jadwal

Cara lain dalam melanggar kekangan integritas kunci asing adalah dengan menambah sebuah baris baru pada tabel Jadwal yang mencantumkan nilai IdKonsumen yang tidak ada di dalam tabel Konsumen.



Tutorial 3.4: Menciptakan Relasi Antara Tabel JenisPertukangan, Jadwal, dan tabel Konsumen
Pada tutorial ini, Anda akan menambahkan dua relasi pada database LayananPertukangan: satu yang menghubungkan tabel JenisPertukangan dengan tabel Jadwal, dan kedua yang menghubungkan tabel Konsumen dengan tabel Jadwal.

Langkah-Langkah Tutorial
Langkah 1: Pada jendela Server Explorer, di bawah nama database LayananPertukangan, klik-kanan pada folder Database Diagrams dan pilih Add New Diagram.

Langkah 2: Jendela Add Table akan ditampilkan. Pilih tabel Jadwal, JenisPertukangan, dan Konsumen. Klik tombol Add, kemudian klik tombol Close.

Langkah 3: Geret mouse dari tombol seleksi tepat ke kiri dari kolom IdKonsumen pada tabel Konsumen ke tombol seleksi di samping kolom IdKonsumen dari tabel Jadwal. Ketika Anda melepaskan tombol mouse, dialog Tables and Columns akan ditampilkan seperti pada Gambar 3.15. Perhatikan bahwa Konsumen diseleksi sebagai Primary key table, dan Jadwal diseleksi sebagai Foreign key table. Kolom IdKonsumen diseleksi pada kedua tabel. Jika berbeda dari apa yang dijelaskan, Anda bisa memperbaikinya sekarang.


Gambar3.15 Menciptakan relasi antara tabel Konsumen dan tabel Jadwal


Langkah 4: Klik tombol OK untuk menyimpan relasi. Ini akan mengekspos jendela Foreign Key Relationship. Di sini, Anda dapat memodifikasi opsi-opsi spesifik yang mengendalikan relasi tabel. Sebagai contoh, opsi Enforce Foreign Key Constraint sama dengan Yes. Ini berarti database akan melemparkan eksepsi jika sebuah aplikasi mencoba menghapus sebuah baris dari tabel induk sehingga beberapa baris pada tabel anak tidak lagi bisa terhubung ke tabel induk.

Langkah 5: Ciptakan relasi lain antara tabel JenisPertukangan dan tabel Jadwal, menggunakan bidang IdJenis sebagai link bersama.

Langkah 6: Simpan diagram database dan beri nama Relasi. Diagram database ditampilkan pada Gambar 3.16.

Gambar 3.16 Diagram database

Langkah 7: Gunakan mouse untuk menggeret tabel JenisPertukangan dan tabel Jadwal ke dalam jendela designer DataSet. Ketika Anda melakukannya, baris-baris yang mengindikasikan relasi akan menghubungkan tabel-tabel, seperti ditunjukkan pada Gambar 3.17.

Gambar 3.17 Jendela designer DataSet



Tutorial 3.5: Mengubah Koneksi Database dari SQL Server Express Ke File Database
Jika aplikasi Anda terus menerus melanjutkan koneksi ke SQL Server Expres untuk melihat dan memperbarui database LayananPertukangan, semua perubahan yang Anda lakukan akan permanen. Ini akan menjadi masalah, misalnya, jika Anda menghapus sejumlah jadwal. Untuk tujuan pengujian, adalah lebih baik untuk bekerja dengan database lokal di dalam direktori projek Anda, seperti yang telah dilakukan pada Bab 11 terhadap database ProdukDB. Tutorial ini akan membawa Anda melalui langkah-langkah dalam menetapkan koneksi database Anda.

Langkah-Langkah Tutorial
Langkah 1: Tutup Visual Studio, sehingga semua koneksi ke server akan dihentikan.

Langkah 2: Cari file LayananPerbaikan1.mdf di dalam direktori data SQL Server. Anda bisa mencarinya di C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data. Salin file ini ke dalam projek Layanan Perbaikan.

Langkah 3: Buka projek Layanan Perbaikan pada Visual Studio.

Langkah 4: Pada jendela Solution Explorer, klik kanan pada nama projek, pilih Add, dan pilih Existing Item. Pilih file LayananPerbaikan1.mdf. Klik tombol Add untuk menutup jendela dialog.

Langkah 5: Klik ganda pada My Project pada jendela Solution Explorer. Ini akan membawa Anda ke jendela Project Properties.

Langkah 6: Pilih tab Settings dan perhatikan bahwa satu-satunya entri di dalam jendela. Klik di dalam kolom Value dan ubah dengan baris berikut:

Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|\LayananPerbaikan1.mdf;
Integrated Security=True;User Instance=True

Teks tersebut dipertahankan menjadi satu baris.

Langkah 7: Simpan projek.

Langkah 8: Buka jendela Server Explorer dan hapus koneksi lama ke database. Ciptakan sebuah koneksi baru ke file database lokal.



3.2 DataTable
DataTable adalah sebuah objek yang merepresentasikan isi tabel dari suatu sumber data. Kelas DataTable .NET dipakai sebagai basis untuk menciptakan tipe-tipe DataTable terspesialisasi. Ketika Anda menambahkan suatu sumber data ke dalam sebuah projek, Visual Studio akan menciptakan sebuah kelas DataTable terspesialisasi, seperti KonsumenDataTable atau AnggotaDataTable.

Kelas DataTable mendeskripsikan koleksi yang memuat baris-baris dan kolom-kolom yang dipakai untuk memuat data dari sebuah database, file XML, atau sumber data lain. Objek DataTable memuat koleksi kolom-kolom, yang menjelaskan tipe data di dalam tabel. Ia juga memuat koleksi baris-baris yang memuat data aktual.

Berikut adalah sejumlah properti di dalam kelas DataTable:
·         Columns: Sebuah koleksi yang memuat objek-objek DataColumn; masing-masing menjelaskan nama, tipe, dan karakteristik-karakteristik lain dari sebuah kolom.
·         DefaultView: Sebuah objek DataView dapat Anda pakai untuk memfilter (menyeleksi) baris-baris tabel atau mengurutkan baris-baris pada sembarang kolom.
·         PrimaryKey: Sebuah array yang memuat objek-objek DataColumn berperan sebagai kunci primer pada tabel; setiap baris dijamin memuat sebuah nilai unik pada kolom.
·         Rows: Sebuah koleksi yang memuat objek-objek DataRow, yang masing-masing memuat data pada tiap baris dari tabel.

Untuk pandangan konseptual, Gambar 3.18 menjelaskan properti Columns dan Rows dari sebuah DataTable.

Mengikat Kontrol Pada Sebuah DataTable
Jika Anda ingin menampilkan isi dari sebuah DataTable pada suatu form, Anda dapat mengikatnya pada ListBox, ComboBox, atau DataGridView. Tugaskan referensi tabel pada properti DataSource dari kontrol tersebut. Statemen berikut, misalnya, mengikat sebuah objek DataTable dengan nama tabelKonsumen pada kontrol DataGridView dengan nama dgvKonsumen:

dgvKonsumen.DataSource = tabelKonsumen


Gambar 3.18 Properti-properti DataTable


Memfilter dan Mengurutkan Baris-Baris dari DataTable
Kelas DataTable memuat sebuah properti DefaultView. Properti ini memiliki dua subproperti penting:
·      Properti RowFilter: Memuat sebuah ekspresi perbandingan yang sama dengan klausa WHERE pada sebuah statemen SELECT.
·        Properti Sort: Mengidentifikasi satu atau lebih kolom yang akan dipakai dalam pengurutan; juga menetapkan penataan ASC (ascending, menaik) atau DESC (descending, menurun).

Anda menugaskan nilai-nilai pada properti-properti ini untuk memfilter atau mengurutkan baris-baris pada sebuah DataTable. Statemen berikut, misalnya, mengurutkan baris-baris dari tabelKonsumen dengan tatanan menaik berdasarkan Nama:

tabelKonsumen.DefaultView.Sort = "Nama"

Statemen berikut mengurutkan tabelKonsumen dengan tatanan menurun berdasarkan IdKonsumen:

tabelKonsumen.DefaultView.Sort = "IdKonsumen DESC"

Statemen berikut membatasi baris-baris tabel pada bidang Nama yang lebih besar dari M:

tabelKonsumen.DefaultView.RowFilter = “Nama > ‘M’”


Objek DataRow
Objek DataRow menjelaskan sebuah baris di dalam sebuah DataTable. Anda dapat menambahkan kolom-kolom pada sebuah DataRow, mengisi baris dengan nilai-nilai, menambahkan baris pada sebuah tabel, dan menghapus sebuah baris pada suatu tabel. Untuk mengkonstruksi sebuah DataRow kosong, Anda memanggil metode NewRow dari DataTable:

Dim tabel As New DataTable
Dim baris As DataRow = tabel.NewRow()

Properti Item dari sebuah DataRow dapat Anda pakai untuk membaca dan menetapkan nilai-nilai kolom. Diasumsikan bahwa tabel Anda memuat sebuah kolom dengan nama Nama_Belakang, statemen berikut menugaskan sebuah nilai pada baris sekarang:

baris.Item("Nama") = "Kristof, John"

Item adalah properti default dari DataRow, jadi Anda dapat menyingkat statemen tersebut:

baris("Nama") = "Kristof, John"

Anda juga dapat mengakses kolom-kolom berdasarkan posisi indeksnya, yang diawali dari 0. Statemen berikut menugaskan nama seseorang pada kolom pertama pada objek baris:

baris.Item(0) = "Kristof, John "

Properti ItemArray menghasilkan sebuah array Object yang memuat semua nilai kolom:

Dim kolom As Object() = baris.ItemArray



DataTable Bertipe Kuat
Ketika Anda menciptakan sebuah DataSet berdasarkan suatu tabel database, Visual Studio akan menciptakan sejumlah kelas-kelas kustom. Kelas-kelas ini sesuai dengan struktur tabel pada DataSet Anda. Kelas LayananPerbaikanDataSet, misalnya, memuat sebuah kelas inner (sebuah kelas di dalam kelas lain) dengan nama KonsumenDataTable. Ia juga memiliki sejumlah metode dan properti, seperti:
·         AddKonsumenRow: Sebuah metode yang menambahkan sebuah baris baru pada tabel.
·         NewKonsumenRow: Sebuah metode yang menghasilkan sebuah baris baru kosong yang memiliki kolom-kolom sama seperti tabel.
·         RemoveKonsumenRow: Sebuah metode yang menghapus suatu baris dari tabel.
·         FindByIdKonsumen: Sebuah metode yang melakukan pencarian suatu baris menggunakan nomor ID konsumen.
·         Count: Sebuah properti yang menghasilkan banyak baris dalam tabel.

Kelas inner lain dengan nama KonsumenRow memuat properti-properti yang merepresentasikan kolom-kolom yang berbeda pada tabel Konsumen. Anda dapat menggunakan properti-properti ini untuk menetapkan nilai-nilai kolom pada kode program Anda:
·         IdKonsumen As Short
·         Nama As String
·         Telepon As String

Selain itu, kelas ini juga memiliki sebuah metode dengan nama GetJadwalRows, yang menghasilkan sebuah koleksi yang memuat baris-baris dari tabel Jadwal yang cocok dengan nomor ID konsumen dari baris terkini. Anda akan mengetahuinya, ketika menuliskan kode untuk melihat dan memperbarui database LayananPerbaikan, bahwa memiliki kelas-kelas seperti KonsumenDataTable dan KonsumenRows akan mempermudah pekerjaan Anda.



3.3 Memperbarui Database Menggunakan SQL
Pada Bab 11, Anda telah belajar bagaimana menambah, memperbarui, dan menghapus baris-baris dari tabel-tabel database, menggunakan kontrol-kontrol data-bound. Database yang dimodifikasi oleh query-query SQL bekerja di balik layar. Sekarang saatnya bagi Anda untuk mempelajari bagaiman operasi-operasi dilakukan dalam bahasa SQL.
·         Statemen INSERT INTO menambahkan sebuah baris baru pada suatu tabel.
·         Statemen UPDATE memodifikasi satu atau lebih baris tabel.
·         Statemen DELETE FROM menghapus atau lebih baris dari sebuah tabel.

Menyisipkan Baris Pada Tabel
Statemen INSERT INTO SQL menyisipkan sebuah baris baru ke dalam suatu tabel, menggunakan sintaksis berikut:

INSERT INTO namatabel
( bidang1, bidang2,...] )
VALUES( nilai1, nilai2,...] )

Query berikut menyisipkan sebuah baris ke dalam suatu tabel dengan nama Gaji:

INSERT INTO Payroll (IdPekerja, TanggalGajian, JamKerja, GajiPerJam)
VALUES(‘1002’, ‘1/15/2015’, 47.5, 27.50)

Semua nama kolom harus dicantumkan dengan urutan yang sama dengan nilai-nilai yang diberikan. String dan literal tanggal harus diapit dengan kutip tunggal.

Parameter Query
Statemen INSERT INTO umumnya tidak memuat nilai kolom literal. Tetapi, parameter query dipakai sehingga nilai-nilai dilewatkan kepada query pada saat aplikasi dijalankan. Nama parameter harus diawali dengan simbol @. Jika dimungkinkan, setiap parameter perlu sesuai dengan nama dari kolom tabel.

Statemen berikut menyisipkan sebuah baris pada tabel Pembayaran (database Karate) menggunakan tiga parameter query:

INSERT INTO Pembayaran(Jumlah, Id_Anggota, Tanggal_Pembayaran)
VALUES (@Jumlah, @Id_Anggota, @ Tanggal_Pembayaran)

Kunci primer dari tabel ini diasumsikan merupaka bidang identitas, jadi tidak diperlukan untuk mencantumkan nilainya pada statemen INSERT. Database akan menghasilkan sebuah nilai kunci primer yang baru setiap kali sebuah baris baru disisipkan ke dalam tabel.

Memperbarui Baris Tabel
Statemen UPDATE memodifikasi isi dari satu atau lebih baris pada sebuah tabel database. Ia memiliki sintaksis berikut:

UPDATE namatabel
SET namabidang = nilaibaru
[SET namabidang = nilaibaru] ...
[WHERE kriteria]

Statemen UPDATE dapat dipakai memodifikasi setiap baris dalam sebuah tabel. Sebagai contoh, query berikut menambah nilai-nilai pada kolom GajiPerJam dari semua baris dalam tabel Gaji sebesar 5 persen:

UPDATE Gaji
SET GajiPerJam = GajiPerJam * 1.05

Umumnya, Anda ingin memperbarui hanya baris-baris tertentu, sehingga Anda dapat mencantumkan klausa WHERE dengan kriteria seleksi. Query berikut, misalnya, menambah gaji per jam bagi pekerja yang digaji setelah tanggal yang disimpan di dalam parameter @TanggalPembayaran:

UPDATE Gaji
SET GajiPerJam = GajiPerJam * 1.05
WHERE TanggalPembayaran > @TanggalPembayaran

Jika Anda ingin memperbarui satu baris saja, klausa WHERE harus secara unik mengidentifikasi baris terseleksi. Biasanya, Anda akan menggunakan sebuah ekspresi yang memuat kunci primer tabel. Sebagai contoh, query berikut menambah gaji per jam untuk satu pekerja dengan nomor ID yang ditetapkan oleh parameter @IdPekerja:

UPDATE Gaji
SET GajiPerJam = GajiPerJam * 1.05
WHERE IdPekerja = @IdPekerja

Anda juga dapat menggunakan parameter query untuk pengali gaji:

UPDATE Gaji
SET GajiPerJam = GajiPerJam * @PersenGaji
WHERE IdPekerja = @IdPekerja


Contoh Database Karate
Query berikut memperbarui tabel Pembayaran (database Karate). Ia menetapkan Jumlah pada nilai di dalam parameter @Jumlah untuk baris dimana di dalamnay Id_Pembayaran sama dengan nilai pada @Id_Pembayaran:

UPDATE Pembayaran
SET Jumlah = @Jumlah
WHERE Id_Pembayaran = @Id_Pembayaran

Menghapus Baris Tabel
Statemen DELETE FROM menghapus baris-baris dari sebuah tabel. Ini adalah sintaksisnya:

DELETE FROM namatabel
[ WHERE kriteria ]

Setelah sebuah baris dihapus, ia tidak dapat dipulihkan. Statemen berikut menghapus semua baris dari tabel Pembayaran:

DELETE FROM Pembayaran

Klausa WHERE menyeleksi baris-baris mana yang akan dihapus. Kode berikut menghapus semua pembayaran sebelum tanggal yang ditetapkan pada parameter @Tanggal_Pembayaran:

DELETE FROM Pembayaran
WHERE Tanggal_Pembayaran < @Tanggal_Pembayaran

Statemen berikut menghapus satu pembayaran, bila diasumsikan bahwa Id_Pembayaran adalah kolom kunci primer:

DELETE FROM Pembayaran
WHERE Tanggal_Pembayaran < @Tanggal_Pembayaran



3.4 Fokus Pada Penyelesaian Permasalahan: Aplikasi Layanan Perbaikan Rumah
Pada Tutorial 3.6, Anda akan menciptakan sebuah kelas tingkat perantara (menengah) untuk aplikasi ini.

Tutorial 3.6: Menambahkan Kelas Jadwal
Pada tutorial ini, Anda akan mulai dengan menciptakan aplikasi Layanan Perbaikan Rumah. Tugas pertama Anda adalah menciptakan kelas perantara dengan nama Jadwal yang memuat sebuah metode yang menyisipkan jadwal-jadwal baru ke dalam database. Anda akan menguji metode ini dari sebuah form baru yang Anda tambahkan pada projek.

Langkah-Langkah Tutorial
Langkah 1: Buka projek Layanan Pertukangan yang telah Anda kerjakan pada Tutorial 3.3.

Langkah 2: Buka file LayananPertukanganDataSet.xsd dari jendela Solution Explorer.

Langkah 3:  Buka jendela designer untuk DataSet, klik kanan pada JadwalTableAdapter dan pilih Add Query…. Kemudian pilih Use SQL statements, selanjutnya klik Next >. Selanjutnya, pilih INSERT.

Langkah 4: Klik pada jendela Query Builder.

Gambar 3.19 Jendela Query Builder untuk JadwalTableAdapter


Langkah 5: Verifikasi query SQL berikut, seperti ditunjukkan pada Gambar 3.19. Simpan query ini dengan nama SisipQuery, seperti ditunjukkan pada Gambar 3.20.

INSERT INTO Jadwal
              (IdJenis, Deskripsi, Lisensi, IdKonsumen, Terjadwal)
VALUES        (@IdJenis,@Deskripsi,@Lisensi,@IdKonsumen,@Terjadwal)


Gambar 3.20 Memberikan nama query


Langkah 6: Tambahkan sebuah kelas perantara dengan nama Jadwal.cs pada projek. Pada kelas ini, deklarasikan variabel-variabel level kelas berikut:

private LayananPertukanganDataSetTableAdapters.JadwalTableAdapter adapter =
    new LayananPertukanganDataSetTableAdapters.JadwalTableAdapter();
public string ErrorTerakhir;

Variabel dengan nama adapter adalah sebuah objek dari TableAdapter yang akan Anda gunakan untuk melakukan sejumlah aksi pada database. ErrorTerakhir akan memuat pesan-pesan error yang dihasilkan oleh metode-metode TableAdapter.

Langkah 7: Ciptakan sebuah metode Sisip.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public bool Sisip(short Idjenis,
                  string deskripsi, bool lisensi,
                  short Idkonsumen, DateTime Terjadwal)
{
    //menyisipkan baris baru ke tabel Jadwal.
    //menghasilkan true jika berhasil. Jika eksepsi dilempar
    //maka ErrorTerakhir akan memuat pesan error.
    try
    {
        ErrorTerakhir = String.Empty;
        adapter.SisipQuery(Idjenis, deskripsi, lisensi, Idkonsumen, Terjadwal);
        return true;
    }
    catch (Exception ex)
    {
        ErrorTerakhir = ex.Message;
        return false;
    }
}

Baris 10 menghapus semua pesan error yang tertinggal pada variabel ErrorTerakhir dari operasi sebelumnya. Baris 11 memanggil metode SisipQuery dari kelas JadwalTableAdapter. Jika tidak ada eksepsi yang dilempar, baris 12 akan menghasilkan true, yang mengindikasikan keberhasilan. Di sisi lain, jika pemanggilan terhadap SisipQuery pada baris 11 melemparkan eksepsi, ErrorTerakhir akan ditugasi sebuah string dan metode ini menghasilkan false.

Langkah 8: Tambahkan sebuah metode dengan nama TanggalWaktuTergabung yang menerima sebuah tanggal dan sebuah waktu dan menghasilka nilai tanggal/waktu tergabug.

public DateTime TanggalWaktuTergabung(DateTime aTanggal, DateTime aWaktu)
{
    TimeSpan ts = new TimeSpan(aWaktu.Hour, aWaktu.Minute, 0);
    return aTanggal.Add(ts);
}

Form Jadwal Baru
Selanjutnya, Anda akan menciptakan form Jadwal Baru, yang akan menguji metode Jadwal.SisipQuery. Untuk sementara ini, Anda tidak menciptakan antarmuka.

Langkah 9: Tambahkan sebuah form baru dengan nama FormJadwalBaru.cs pada projek. Tetapkan properti Text-nya menjadi Jadwal Pertukangan Baru. Tambahkan kode baris berikut pada kelas form:

private Jadwal mJadwal = new Jadwal();

Baris ini menciptakan sebuah objek dari kelas Jadwal di dalam form, sehingga Anda dapat memanggil metode Sisip-nya.

Langkah 10: Tambahkan sebuah tombol pada form, dengan properti Text menjadi Simpan. Sisipkan kode berikut pada event handler Click dari tombol itu:

DateTime dt = new DateTime(2016, 10, 5);
mJadwal.Sisip(2,"Membetulkan Tong Sampah", false, 1020, dt);
           
FormJadwal formJadwal = new FormJadwal();
formJadwal.ShowDialog();

Statemen pertama menyisipkan sebuah jadwal baru ke dalam database. Statemen kedua menampilkan isi lengkap dari tabel Jadwal pada form terpisah, sehingg Anda dapat memverifikasi bahwa jadwal baru telah diciptakan.

Langkah 11: Tetapkan form startup dari projek menjadi FormJadwalBaru dan jalankan aplikasi. Anda akan melihat keluaran seperti pada Gambar 3.21.

Jika Anda mengulangi aplikasi dan mengklik tombol lagi, ia akan menambahkan baris lain dengan informasi yang sama pada tabel Jadwal. Setiap jadwal akan memiliki nilai berbeda pada kolom IdJadwal karena nilai itu dihasilkan secara otomatis oleh database.

Langkah 12: Ketika selesai, bangun-ulang (rebuild) projek dari menu BUILD. Ini akan membuat database ke kondisi semula.

Gambar 3.21 Tabel Jadwal, dengan baris baru ditambahkan



Tutorial 3.7: Menciptakan Form Startup
Pada tutorial ini, Anda akan menciptakan sebuah form startup untuk aplikasi Layanan Perbaikan. Anda akan menciptakan sebuah menu yang menampilkan semua form yang ada.

Langkah-Langkah Tutorial
Langkah 1: Tambahkan sebuah form baru dengan nama FormUtama.cs pada projek, dan tetapkan properti Text-nya menjadi Layanan Pertukangan Rumah. Modifikasi properti projek agar menjadikannya sebagai form startup dari aplikasi.

Langkah 2: Tambahkan sebuah kontrol MenuStrip dengan struktur menu berikut:
File
   Keluar
Jadwal
   Baru
   Lihat
   Daftar Jadwal
Konsumen
   Lihat

Langkah 3: Ciptakan sebuah event handler Click untuk item menu File | Keluar, dan sisipkan statemen this.Close().

Langkah 4: Ciptakan sebuah event handler Click untuk item menu Jadwal | Baru, dan sisipkan statemen berikut:

FormJadwalBaru formJadwalBaru = new FormJadwalBaru();
formJadwalBaru.ShowDialog();

Langkah 5: Ciptakan sebuah event handler Click untuk item menu Jadwal | Lihat, dan sisipkan statemen berikut:

FormJadwal formJadwal = new FormJadwal();
formJadwal.ShowDialog();

Langkah 6: Ciptakan sebuah event handler Click untuk item menu Konsumen | Lihat, dan sisipkan statemen berikut:

FormKonsumen.ShowDialog()

Langkah 7: Ubah form startup dengan membuka Program.cs dengan menyisipkan kode berikut:

Application.Run(new FormUtama());

Jalankan aplikasi.



Tutorial 3.8: Menambah Kelas Pada Tingkat Menengah
Pada tutorial ini, Anda akan menciptakan kelas Konsumen dan JenisPertukangan pada tingkat perantara atau tingkat menengah dari aplikasi Layanan Pertukangan Rumah. Kedua kelas ini menyediakan link-link penting untuk KonsumenTableAdapter dan JenisPertukanganTableAdapter, yang merupakan bagian dari tingkat akses data. Anda juga akan menambahkan metode-metode yang membaca daftar jenis perbaikan dan daftar nama konsumen.

Langkah-Langkah Tutorial
Langkah 1: Tambahkan sebuah kelas tingkat menengah dengan nama JenisPertukangan.cs pada projek.

Langkah 2: Tambahkan variabel level-kelas pada kelas JenisPertukangan:

private LayananPertukanganDataSetTableAdapters.JenisPertukanganTableAdapter adapter =
    new LayananPertukanganDataSetTableAdapters.JenisPertukanganTableAdapter();

Langkah 3: Ciptakan sebuah properti dengan nama Item yang menghasilkan sebuah DataTable yang memuat semua jenis perbaikan:

1
2
3
4
5
6
7
8
9
public System.Data.DataTable Item
{
    get
    {
        System.Data.DataTable tabel = adapter.GetData();
        tabel.DefaultView.Sort = "Deskripsi";
        return tabel;
    }
}

Sebuah kelas menengah memberikan Anda kesempatan untuk mendefinisikan data yang akan dihasilkan oleh sebuah adapter tabel. Pada metode ini, baris 5 memanggil metode GetData dari adapter, yang menghasilkan sebuah DataTable yang memuat semua jenis perbaikan yang dicantumkan pada tabel JenisPerbaikan. Baris 6 mengurutkan data berdasarkan deskripsi, dan baris 7 menghasilkan tabel terurut.

Langkah 4: Tambahkan sebuah kelas tingkat menengah yang baru dengan nama Konsumen.cs pada projek.

Langkah 5: Tambahkan variabel level-kelas pada kelas Konsumen:

private LayananPertukanganDataSetTableAdapters.KonsumenTableAdapter adapter =
    new LayananPertukanganDataSetTableAdapters.KonsumenTableAdapter();

Langkah 6: Ciptakan sebuah properti dengan nama Item yang menghasilkan sebuah DataTable yang memuat semua konsumen:

1
2
3
4
5
6
7
8
9
public System.Data.DataTable Item
{
    get
    {
        System.Data.DataTable tabel = adapter.GetData();
        tabel.DefaultView.Sort = "Nama";
        return tabel;
    }
}



Tutorial 3.9: Menambah Kontrol-Kontrol Pada Form Jadwal Baru
Pada tutorial ini, Anda akan menambahkan kontrol-kontrol pada form Jadwal Baru. Form ini akan dipakai user untuk memasukkan data jadwal dan menambahkan sebuah baris baru pada tabel Jadwal. Kode akan memanggil metode-metode dari tiga kelas perantara. Konsumen, Jadwal, dan JenisPertukangan.

Langkah-Langkah Tutorial
Langkah 1: Buka jendela design untuk FormJadwalBaru.vb. Dengan menggunakan contoh pada Gambar 3.22 dan daftar nama kontrol pada Tabel 3.3, tambahkan kontrol-kontrol yang diperlukan pada form.

Gambar 3.22 Form Jadwal Baru


Tabel 3.3 Kontrol-kontrol pada form Jadwal Baru
Jenis Kontrl
Nama Kontrol
Pengaturan Properti
Form






TextBox
TextBox
TextBox
DateTimePicker
ComboBox
ComboBox
CheckBox
Label
Button
Button
ErrorProvider
FormJadwalBaru






teksWaktu
teksDeskripsi
teksIdJadwal
dtpTanggal
cboKonsumen
cboJenisPerbaikan
chkLisensi
labelStatus
tombolSimpan
tombolBatal
errProvider
Text = Jadwal Pertukangan Baru
AcceptButton = tombolSimpan
CancelButton = tombolBatal
FormBorderStyle = FixedDialog
MaximizeBox = False
MinimizeBox = False
Font.Size = 10

MultiLine = True

Format = Short


Text = Harus berlisensi
AutoSize = False
Text = Simpan
Text = Batal


Dua kotak combo penting karena ia menyediakan daftar konsumen dan daftar pertukangan. Ketika user menyeleksi nilai dari daftar itu, nilai ID akan disimpan pada jadwal perbaikan baru. Selanjutnya, Anda akan menambahkan kode pada form yang memanggil metode-metode dari kelas Jadwal, JenisPertukangan, dan Konsumen.

Langkah 2: Buka jendela form dan tambahkan variabel-variabel level-kelas baru sehingga sekarang Anda memiliki:

private Jadwal mJadwal = new Jadwal();
private JenisPertukangan mJenisPertukangan = new JenisPertukangan();
private Konsumen mKonsumen = new Konsumen();

Setiap objek yang dideklarasikan di sini adalah objek dari kelas perantara. Ini adalah pola yang terjadi pada hampir setiap form.

Langkah 3: Ciptakanlah event handler Form_Load berikut:

1
2
3
4
5
6
7
8
9
10
11
private void FormJadwalBaru_Load(object sender, EventArgs e) {
    //mengisi kotak combo jenis perbaikan
    cboJenisPertukangan.DataSource = mJenisPertukangan.Item;
    cboJenisPertukangan.DisplayMember = "Deskripsi";
    cboJenisPertukangan.ValueMember = "IdJenis";

    //mengisi kotak kombo konsumen
    cboKonsumen.DataSource = mKonsumen.Item;
    cboKonsumen.DisplayMember = "Nama";
    cboKonsumen.ValueMember = "IdKonsumen";
}

Tujuan dari kode ini adalah untuk mengisi dua kotak combo dengan daftar konsumen dan daftar jenis perbaikan. Baris 3 memanggil properti Item dari kelas JenisPerbaikan, yang menghasilkan sebuah DataTable yang mencantumkan semua jenis perbaikan yang mungkin. Baris 8-10 mengikat kotak combo lain dengan sebuah DataTable yang memuat nama-nama konsumen dan IDnya.

Langkah 4: Ciptakanlah handler Click untuk tombol Simpan. Anda telah memilikinya, jadi Anda perlu menggantinya dengan ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
private void tombolSimpan_Click(object sender, EventArgs e)
{
    DateTime Terjadwal;
    try
    {
        Terjadwal = Jadwal.TanggalWaktuTergabung(
           dtpTanggal.Value.Date, Convert.ToDateTime(teksWaktu.Text));
    }
    catch
    {
        ErrorProvider errProvider = new ErrorProvider();
        errProvider.SetError(teksWaktu,
           "Silahkan masukkan jadwal yang valid");
        return;
    }

    short iDjenis = Convert.ToInt16(cboJenisPertukangan.SelectedValue);
    short iDKonsumen = Convert.ToInt16(cboKonsumen.SelectedValue);
    bool lisensi = chkLisensi.Checked;
    short idjadwal = Convert.ToInt16(teksIdJadwal.Text);

    if (mJadwal.Sisip(idjadwal, iDjenis, teksDeskripsi.Text, lisensi, iDKonsumen, Terjadwal))
        this.Close();
    else
        labelStatus.Text = "Tidak bisa menambah jadwal. " +
          mJadwal.ErrorTerakhir;
}

Baris 6-7 memanggil metode utilitas dari kelas Jadwal yang menggabungkan tanggal dan waktu, dan menugaskan hasil kepada variabel Terjadwal. Jika konversi tanggal melemparkan eksepsi, ia akan ditangkap pada baris 11, dimana kontrol ErrorProvider akan menampilkan pesan error.

Baris 17-18 membaca ID jenis perbaikan dan ID konsumen dari dua kotak combo, dan baris 19 membaca nilai lisensi dari kotak periksa. Baris 14 memanggil metode Sisip dari kelas Jadwal, melewatkan semua nilai yang diperlukan. Jika metode Sisip menghasilkan false, pesan error akan ditampilkan pada baris 22. Terakhir, baris 23 menutup form segera setelah jadwal disimpan.

Langkah 5: Tambahkan handler Click berikut untuk tombol Batal, dan simpan projek.

private void tombolBatal_Click(object sender, EventArgs e)
{
    this.Close();
}

Entri baru ditampilkan pada form Jadwal.

Gambar 3.23 Entri baru pada form Jadwal



Tutorial 3.10: Melakukan Pencarian Jadwal
Pada tutorial ini, Anda akan menambahkan kapabilitas pencarian pada aplikasi Layanan Perbaikan Rumah. Anda akan memodifikasi form Jadwal dan kelas Jadwal.

Langkah-Langkah Tutorial
Langkah 1: Buka kelas Jadwal.cs dan sisipkan metode berikut, yang menghasilkan semua baris dari tabel Jadwal pada database:

public System.Data.DataTable Item
{
    get
    {
        return adapter.GetData();
    }
}

Langkah 2: Ciptakan metode GetByIdKonsumen, yang menghasilkan sebuah DataTable yang memuat jadwal-jadwal untuk satu konsumen:

1
2
3
4
5
public System.Data.DataTable GetByIdKonsumen(short Idkons) {
    System.Data.DataTable tabel = adapter.GetData();
    tabel.DefaultView.RowFilter = "IdKonsumen = " + Idkons;
    return tabel;
}

Baris 2 mendapatkan semua baris dari tabel Jadwal, dan baris 3 menerapkan suatu ekspresi filter yang membatasi baris-baris untuk satu ID konsumen. Baris 4 menghasilkan tabel terfilter. Metode ini merupakan salah satu contoh bagaimana kode pada tingkat perantara (menengah) dari aplikasi dapat meningkatkan metode-metode yang telah ada di dalam suatu TableAdapter.

Kelas FormJadwal
Langkah 3: Buka kelas FormJadwal.cs pada jendela design. Hapus komponen-komponen pengikat-data dari form, dan hapus semua event handler dari jendela kode.

Langkah 4: Sesuaikan ukuran form untuk memberi ruang bagi sebuah kontrol ToolStrip di sisi atas form.

Langkah 5: Tambahkan sebuah kontrol ToolStrip pada form dan tambahkan kontrol-kontrol yang dicantumkan pada Tabel 3.4. Secara opsional, Anda bisa menyisipkan kontrol-kontrol separator di antara item-item ToolStrip. Gambar 3.24 menunjukkan form pada saat aplikasi dijalankan, untuk memberikan Anda panduan saat menempatkan tombol-tombol.

Tabel 3.4 Kontrol-kontrol pada form Jadwal
Jenis Kontrl
Nama Kontrol
Pengaturan Properti
DataGridView


ToolStrip
ToolStripButton



ToolStripSeparator
ToolStripLabel
ToolStripComboBox
dgvJadwal


(default)
tombolSemua



(default)
(default)
cboKonsumen
BackgroundColor = Control
BorderStyle = None
Anchor = Top, Bottom, Left, Right

AutoSize = False
Size.Width = 50
DisplayStyle = Text
Text = Semua


Text = Customer:


Gambar 3.24 FormJadwal, saat aplikasi dijalankan


Langkah 6: Buka jendela kode dari form dan tambahkan deklarasi-deklarasi variabel berikut:

private Jadwal mJadwal = new Jadwal();
private Konsumen mKonsumen = new Konsumen();
private bool formLoading = true;

Dua variabel pertama merupakan objek-objek dari kelas menengah. Variabel ketiga akan membantu Anda untuk menghindari event kotak combo saat form dimuat.

Langkah 7: Ciptakanlah sebuah event handler Click untuk tombol Semua dan sisipkan baris kode berikut, yang mengisi kontrol DataGridView dengan semua baris dari tabel Jadwal:

dgvJadwal.DataSource = mJadwal.Item;

Langkah 8: Jalankan aplikasi dan uji tombol Semua pada form ini. Ini akan menampilkan semau jadwal. Hentikan aplikasi. Tugas Anda selanjutnya adalah memampukan user untuk melakukan pencarian terhadap jadwal berdasarkan nama konsumen.

Langkah 9: Ciptakanlah event handler Form_Load, yang pekerjaannya untuk mengisi kotak combo dengan sejumlah nama konsumen; ia membacanya dari properti Item dari objek Konsumen:

1
2
3
4
5
6
7
8
9
10
private void FormJadwal_Load(object sender, EventArgs e)
{
    this.cboKonsumen.ComboBox.DataSource = mKonsumen.Item;
    this.cboKonsumen.ComboBox.DisplayMember = "Nama";
    this.cboKonsumen.ComboBox.ValueMember = "IdKonsumen";
    this.cboKonsumen.ComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
    this.cboKonsumen.ComboBox.SelectedIndex = -1;

    formLoading = false;
}

Baris 3-5 menginisialisasi bidang-bidang yang membantu Anda untuk menampilkan sejumlah konsumen pada kotak combo. Baris 6 menetapkan sebuah properti pada kotak combo yang mencegah user dari secara langsung mengetikkan nama secara acak. Anda umumnya menetapkan properti ini pada mode design, tetapi karena kotak combo ini berada pada suatu ToolStrip, jendela Properties pada Visual Studio tidak menampilkan properti ComboBoxStyle. Baris 7 menetapkan SelectedIndex menjadi -1, sehingga tidak ada nama konsumen yang akan ditampilkan saat form pertama kali ditampilkan. Baris 9 menetapkan formLoading menjadi false, untuk mengindikasikan bahwa form telah selesai melakukan proses pemuatan.

Langkah 10: Ciptakanlah event handler SelectedIndexChanged untuk kontrol ComboBox berikut:

private void cboKonsumen_SelectedIndexChanged(object sender, EventArgs e)
{
    if (!(formLoading))
    {
        short IdKonsumen =
            Convert.ToInt16(cboKonsumen.ComboBox.SelectedValue);
        dgvJadwal.DataSource =
            mJadwal.GetByIdKonsumen(IdKonsumen);
    }
}

Statemen if memeriksa variabel formLoading untuk melihat apakah event ini telah dipicu selama proses pemuatan awal pada form. Jika variabel ini bernilai true, maka Anda tidak melakukan pencarian apapun.

Langkah 11: Jalankan aplikasi, pilih Lihat dari menu Jadwal, dan lakukan eksperimen dengan memilih nama konsumen yang berbeda dari kotak combo. Salah satu contohnya ditampilkan pada Gambar 3.25. Selain itu, klik tombol Semua untuk memverifikasi semua jadwal.


Gambar 3.25 Menampilkan komponen-komponen untuk satu konsumen


Kode Program
Periksa kode berikut untuk kelas FormJadwal untuk melihat bahwa Anda tidak melewatkan apapun:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Layanan_Perbaikan
{
    public partial class FormJadwal : Form
    {
        private Jadwal mJadwal = new Jadwal();
        private Konsumen mKonsumen = new Konsumen();
        private bool formLoading = true;
       
        public FormJadwal()
        {
            InitializeComponent();
        }

        private void tombolSemua_Click(object sender, EventArgs e)
        {
            dgvJadwal.DataSource = mJadwal.Item;
        }

        private void FormJadwal_Load(object sender, EventArgs e)
        {
            this.cboKonsumen.ComboBox.DataSource = mKonsumen.Item;
            this.cboKonsumen.ComboBox.DisplayMember = "Nama";
            this.cboKonsumen.ComboBox.ValueMember = "IdKonsumen";
            this.cboKonsumen.ComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
            this.cboKonsumen.ComboBox.SelectedIndex = -1;

            formLoading = false;
        }

        private void cboKonsumen_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (!(formLoading))
            {
                short IdKonsumen =
                    Convert.ToInt16(cboKonsumen.ComboBox.SelectedValue);
                dgvJadwal.DataSource =
                    mJadwal.GetByIdKonsumen(IdKonsumen);
            }
        }
    }
}


No comments:

Post a Comment