<p><a href="http://pojokprogrammer.net/content/aplikasi-inventory-sederhana-form-ma…"><strong>Form Master Barang</strong></a> | Setelah sebelumnya kita berhasil membuat templare <a href="http://pojokprogrammer.net/content/aplikasi-inventory-sederhana-desain-…">desain user interface</a> dan <a href="http://pojokprogrammer.net/content/aplikasi-inventory-sederhana-data-ac…">data access layer</a>, berikutnya kita akan membuat form untuk mengelola proses <em><strong>CRUD </strong></em>(<em>Create, Read, Update, Delete</em>) untuk data Master Barang di Aplikasi Inventory ini. Untuk mengelola data master barang ini, kita memerlukan 2 (dua) buah form, yaitu <strong>Form List Barang</strong>, dan <strong>Form Entri Barang</strong>. Kedua form tersebut akan menggunakan metode <span style="color:#0000FF"><strong><em>data-binding </em></strong></span>untuk menampilkan data yang berhasil diambil menggunakan <em>library data access layer </em>yang kita buat sebelumnya.</p> <!--break--> <blockquote> <p>Artikel ini adalah lanjutan dari artikel berseri tentang <strong><a href="http://pojokprogrammer.net/node/41">Tutorial Membuat Aplikasi Inventory Sederhana Menggunakan VB.net dan Database MySQL</a></strong>. </p> </blockquote> <h3>Data Binding</h3> <p><strong>Data Binding adalah </strong>metode untuk menghubungkan elemen atau komponen user interface dengan data access layer di belakangnya. Dengan konfigurasi yang benar, maka perubahan apapun yang ada di data layer dapat langsung terlihat di user interface. Dan juga sebaliknya, perubahan yang kita lakukan di form user interface dapat langsung terseimpan ke database, hanya dengan memanfaatkan beberapa baris kode saja. Untuk mencapai hal ini, kita hanya perlu mengkonfigurasikan <em>property data-binding </em>yang ada di setiap elemen user interface yang terlibat. Jadi misalkan kita mempunyai sebuah TextBox yang di-<em>binding</em> ke sebuah DataSet, maka ketika kita mengisikan sesuatu, atau mengubah isi TextBox bersangkutan, maka secara otomatis data yang tersimpan di DataSet juga ikut berubah.</p> <h3>Form Entri Barang</h3> <p>Kita akan menggunakan <strong>satu buah form yang sama </strong>untuk proses menambah data baru (<em>Add New</em>) dan mengubah data lama (<em>Edit</em>) dikarenakan field yang terlibat akan sama, hanya berbeda behavior saat di awal melakukan inisialisasi data. Saat menambah data baru yang perlu dilakukan adalah menambahkan satu row kosong, sedangkan saat mengubah data yang dilakukan adalah mengambil ulang (<em>Retrieve</em>) data dari database. Langkah-langkah yang perlu dilakukan antara lain:</p> <ul> <li> <p>Menyiapkan sebuah <em>Inherited Form</em> dari template frmEdit kemudian kita beri nama <em><strong>frmItemEdit</strong></em>. <strong>Untuk menambahkan form turunan </strong>dari template yang sudah kita buat di atas maka, maka silakan <strong>buka Form Dialog Add New Item</strong>, dan pilih Inherited Form seperti gambar di bawah ini, kemudian berikan nama form turunan dan klik tombol [Add]</p> </li> </ul> <p> Spoiler: Add New Item Dialog <img alt="Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs" src="/sites/default/files/tutorial/vbnet/master/10-add-new-item.png" style="height:390px; width:640px" /> </p> <ul> <li> <p><strong>Berikutnya </strong>akan muncul Dialog Box yang meminta kita untuk memilih Form superclass, atau Form template layout yang akan kita pakai sebagai parent, seperti tampak pada gambar di bawah ini.</p> </li> </ul> <p> Spoiler: Select Parent Form <img alt="Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs" src="/sites/default/files/tutorial/vbnet/master/11-select-template.png" style="height:387px; width:640px" /> </p> <ul> <li> <p>Menambahkan <strong>elemen user interface </strong>ke dalam frmItemEdit. Tambahkan semua elemen field yang diperlukan ke dalam form, sehingga tampak seperti desain form di bawah ini.</p> </li> </ul> <p> Spoiler: Desain Awal Form Master Barang <img alt="Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs" src="/sites/default/files/tutorial/vbnet/master/13-design-form-edit.png" style="height:455px; width:640px" /> </p> <ul> <li> <p>Setting <strong>konfigurasi data-binding </strong>untuk setiap elemen User Interface. Pertama-tama pilih TextBox kode barang, kemudian cari <em>property </em>Text dalam group DataBinding, kemudian klik tombol dropdown dan pilih field <em>code </em>dari table <em>items </em>sebagai <em>data-binding</em>-nya seperti tampak pada gambar di bawah ini.</p> </li> </ul> <p> Spoiler: Setting Property Data Binding <img alt="Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs" src="/sites/default/files/tutorial/vbnet/master/15-setting-data-binding-1.png" style="height:455px; width:640px" /> </p> <ul> <li> <p>Pada saat <strong>pertama kali kita melakukan setting data-binding, </strong>maka akan muncul beberapa komponen baru di bawah desain form, seperti tampak pada gambar di bawah ini. Selanjutnya lakukan setting data-binding untuk semua field lainnya.</p> </li> </ul> <p> Spoiler: Tambahan Komponen Setelah Setting Data Binding Pertama Kali <img alt="Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs" src="/sites/default/files/tutorial/vbnet/master/16-setting-data-binding-2.png" style="height:455px; width:640px" /> </p> <ul> <li> <p>Menambahkan <strong>kode untuk membedakan inisialisasi data </strong>baru dengan edit data lama. Untuk membedakan proses inisialisasi databaru dengan edit data lama, maka kita manfaatkan constructor New dengan tambahan parameter id saat ketika kita ingin mengubah (edit) data lama.</p> </li> </ul> <p> Spoiler: Kode Sumber Inisialisasi Form Edit </p> <pre> Public Sub New() ' This call is required by the designer. InitializeComponent() ' panggil inisialisasi database InitializeDatabase(-1) End Sub Public Sub New(ItemID As Integer) ' This call is required by the designer. InitializeComponent() ' panggil inisialisasi database InitializeDatabase(ItemID) End Sub Private Sub InitializeDatabase(ItemID As Integer) ' try retrieve data Try ' periksa nilai ItemID ' jika kurang dari 0 maka kita asumsikan mau bikin data baru ' jika lebih dari 0 maka kita asumsikan ambil bikin data lama If ItemID < 0 Then Me.BindingContext(Me.ItemsBindingSource).AddNew() Else Me.ItemsTableAdapter.FillByID(Me.DsInventory.items, ItemID) End If Catch ex As Exception MessageBox.Show("Error retrieving data from database\nDetails: " + ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End Try End Sub</pre> <p> </p> <ul> <li> <p>Menambahkan <strong>kode untuk menyimpan perubahan data </strong>ke database. Untuk menambahkan kode penyimpanan data ke database, bukalah designer form, kemudian klik ganda (<em>double click</em>) button [Save] dan tambahkan kode seperti di bawah ini.</p> </li> </ul> <p> Spoiler: Kode Sumber Penyimpanan Data Ke Database </p> <pre> Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' try saving data Try ' akhiri proses editing Me.BindingContext(Me.ItemsBindingSource).EndCurrentEdit() ' persist changes Me.ItemsTableAdapter.Update(Me.DsInventory) ' informasikan data berhasil disimpan MessageBox.Show("Data BERHASIL disimpan!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information) ' tutup form Me.Close() Catch ex As Exception MessageBox.Show("Error saving data to database\nDetails: " + ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End Try End Sub</pre> <p> </p> <h3>Form List Barang</h3> <p>Sedangkan untuk melihat seluruh data barang yang tersimpan di database, kita akan membuatkan <strong>sebuah form list </strong>yang akan berisikan tombol-tombol (<em>button</em>) untuk proses tambah data, ubah data, dan delete data barang. Langkah-langkah yang perlu dilakukan antara lain,</p> <ul> <li><strong>Menyiapkan </strong>sebuah <em>Inherited Form </em>dari template frmList kemudian kita beri nama <em><strong>frmItemList</strong></em>. Cara membuat <em>Inherited Form </em>sama seperti saat kita membuat frmItemEdit di atas, silakan lakukan cara yang sama.</li> <li>Berikutnya yang perlu kita lakukan adalah <strong>menambahkan elemen user interface </strong>ke dalam frmItemList. Elemen user interface yang harus di tambahkan di form list ini adalah DataGridView yang akan menampilkan seluruh data yang kita ambil dari database</li> </ul> <p> Spoiler: Desain Form List Master Barang <img alt="Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs" src="/sites/default/files/tutorial/vbnet/master/20-design-form-list.png" style="height:455px; width:640px" /> </p> <ul> <li>Setting <strong>konfigurasi data-binding </strong>untuk setiap elemen User Interface. Proses setting data-binding ini bisa dilakukan lewat property Data Source, atau dapat juga dengan menggunakan shortcut context button kecil yang ada di atas design DataGridView, seperti tampak pada gambar di bawah ini.</li> </ul> <p> Spoiler: Konfigurasi Data Binding <img alt="Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs" src="/sites/default/files/tutorial/vbnet/master/22-setting-data-binding-list1.png" style="height:455px; width:640px" /> </p> <ul> <li>Jika kita membuka kode sumber untuk frmItemList ini, maka akan terlihat bahwa Visual Studio secara otomatis menambahkan sebaris kode untuk mengambil data dari database menggunakan data access layer yang kita buat pada artikel sebelumnya. Rupanya Visual Studio cukup cerdas dengan menmbahkan kode sumber yang diperlukan untuk mengantisipasi para developer yang terlupa menambahkannya.</li> </ul> <p> Spoiler: Auto Generate Code untuk Retrieve Data dari Visual Studio <img alt="Aplikasi Inventory Sederhana Desain User Interface Visual Inheritance BiruniLabs" src="/sites/default/files/tutorial/vbnet/master/22-setting-data-binding-list2.png" style="height:263px; width:640px" /> </p> <ul> <li>Menambahkan <strong>kode untuk mengambil data </strong>dari database. Proses pengambilan data (<em>data retrieval</em>) ini dilakukan pada saat Load Form, dimana kode sumbernya sudah ditambahkan secara otomatis oleh Visual Studio. Namun kita perlu tambahkan satu lagi ke button [Refresh] agar kita bisa mengambil ulang isi database. Caranya cukup dengan melakukan klik ganda (<em>double click</em>) pada <em>button4 </em>yang bertuliskan [Refresh]</li> </ul> <p> Spoiler: Kode Sumber untuk Proses Retrieve Data </p> <pre> Private Sub frmItemList_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'TODO: This line of code loads data into the 'DsInventory.items' table. You can move, or remove it, as needed. Me.ItemsTableAdapter.Fill(Me.DsInventory.items) End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Me.ItemsTableAdapter.ClearBeforeFill = True Me.ItemsTableAdapter.Fill(Me.DsInventory.items) End Sub</pre> <p> </p> <ul> <li>Menambahkan kode untuk <strong>menampilkan form tambah data </strong>baru. Untuk menambah data baru, kita perlu memanggil frmItemEdit tanpa menggunakan parameter apapun agar form edit barang tahu kita akan menambahkan data baru. Caranya cukup dengan melakukan klik ganda (<em>double click</em>) pada <em>button1 </em>yang bertuliskan [Add], kemudian tambahkan kode berikut ini</li> </ul> <p> Spoiler: Kode Sumber untuk Tambah Data Baru </p> <pre> Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' start process Cursor = Cursors.AppStarting ' prepare variables Dim fx As frmItemEntry fx = New frmItemEntry ' tampilkan form fx.ShowDialog() ' refresh data, ambil data yang berubah Button4.PerformClick() ' finish process Cursor = Cursors.Default End Sub </pre> <p> </p> <ul> <li>Menambahkan kode untuk <strong>menampilkan form ubah data </strong>lama. Untuk mengubah data lama, yang kita perlu lakukan adalah memanggil frmItemEdit dengan memberikan parameter id agar form edit barang tahu kita akan menambahkan data baru. Caranya cukup dengan melakukan klik ganda (<em>double click</em>) pada <em>button2 </em>yang bertuliskan [Edit], kemudian tambahkan kode berikut ini</li> </ul> <p> Spoiler: Kode Sumber untuk Ubah Data Lama </p> <pre> Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ' start process Cursor = Cursors.AppStarting ' prepare variables Dim id As Integer Dim fx As frmItemEntry ' ambil id data yg akan diedit id = DataGridView1.SelectedRows(0).Cells("id").Value ' create form entry berdasarkan id yang dipilih fx = New frmItemEntry(id) ' refresh data, ambil data yang berubah Button4.PerformClick() ' tampilkan form fx.ShowDialog() ' finish process Cursor = Cursors.Default End Sub </pre> <p> </p> <ul> <li>Menambahkna kode untuk <strong>menghapus data barang</strong>. Untuk menghapus data, yang kita perlu lakukan adalah mengambil row data yang akan dihapus, kemudian melakukan konfirmasi ke pengguna apakah benar-benar akan menghapus data yang dimaksud. Caranya cukup dengan melakukan klik ganda (<em>double click</em>) pada <em>button3 </em>yang bertuliskan [Edit], kemudian tambahkan kode berikut ini,</li> </ul> <p> Spoiler: Kode Sumber untuk Hapus Data </p> <pre> Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click ' start process Cursor = Cursors.AppStarting ' prepare variables Dim dr As DialogResult Dim id As Integer Dim code As String Dim name As String Dim message As String Dim pos As Integer ' ambil id dan code dari data yg akan diedit Dim dv As DataRowView dv = Me.BindingContext(Me.ItemsBindingSource).Current id = Convert.ToInt32(dv("id")) code = Convert.ToString(dv("code")) name = Convert.ToString(dv("name")) ' buat pesan konfirmasi message = String.Format("Are you sure to delete this [{0}] {1} data ? ", code, name) ' try deleting Try dr = MessageBox.Show(message, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If dr = Windows.Forms.DialogResult.Yes Then pos = Me.BindingContext(Me.ItemsBindingSource).Position Me.BindingContext(Me.ItemsBindingSource).RemoveAt(pos) Me.ItemsTableAdapter.Update(Me.DsInventory) Me.DsInventory.AcceptChanges() End If Catch ex As Exception MessageBox.Show("Error deleting data from database\nDetails: " + ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Me.DsInventory.RejectChanges() End Try ' finish up Cursor = Cursors.Default End Sub </pre> <p> </p> <h3>Simpulan</h3> <p>Jika kita perhatikan kode sumber yang kita tuliskan di aplikasi ini sangat sedikit sekali dikarenakan kita menggunakan metode data-binding. Kita juga tidak perlu lagi repot-repot membuat perintah SQL untuk proses <strong><em>CRUD</em></strong>, karena proses <em>CRUD </em>ini sudah ditangani di data access layer. Dengan makin sedikit-nya kode yang harus kita tuliskan tentunya akan semakin meningkatkan produktifitas kita semua sebagai programmer dan semakin banyak karya-karya fenomenal yang bisa kita buat.</p> <h3>Source Code</h3> <p>Untuk memudahkan teman-teman mempelajari hal ini, silakan <strong><a href="http://pojokprogrammer.net/sites/default/files/tutorial/vbnet/BiruniLab…">Download Source Code Di Sini</a>. <span style="color:rgb(128, 0, 0)">Dibuat menggunakan Visual Studio 2013</span></strong>, </p> <p><strong>Salam <span style="color:rgb(0, 0, 255)">Pojok</span><span style="color:rgb(255, 0, 0)">Programmer</span></strong> ^_^</p> <p> </p> <p>/</p> Tag VB.net Database Tutorial Programming Aplikasi Inventory User Interface Data Binding Log in to post comments13674 kali dilihat Book traversal links for Aplikasi Inventory Sederhana - Form Master Barang ‹ Aplikasi Inventory Sederhana - Data Access Layer Ke atas Aplikasi Inventory Sederhana - Form Transaksi Barang Masuk ›