Snippet

[Tutorial] Membuat Aplikasi dengan Visual Basic .NET 2008 - 3

Langsung aja, di tutorial ke-2 kemarin kita telah sedikit mengenal tentang LINQ dan juga telah membuat suatu form barang. Kali ini kita akan mencoba menambahkan kode-kode yang akan diproses oleh tiap tombol dalam form barang tersebut. Untuk kali ini validasi dalam setiap proses akan diabaikan terlebih dahulu, nanti pasti menyusul... ;) 

Sebagai tambahan, lebih tepatnya "update", pada tiap tabel dalam database semua yang bertype nchar di ubah ke nvarchar.. tanya kenapa??
Sebelum dilanjutkan, ada baiknya semua kode-kode dalam form barang di hapus dahulu, kecuali, kode-kode di bawah ini:
  1. Public Class frmBarang  
  2.   
  3.  Private Sub frmBarang_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load  
  4.   
  5.  End Sub  
  6. End Class  

1. Dekarasi beberapa variabel umum
Masukkan kode berikut pada bagian atas setelah Public Class frmBarang :
  1. Private db As New DataClasses1DataContext  
  2. Private edit As Boolean  

1.a. Sub Procedure buka
Digunakan untuk mengunci dan membuka TextBox dan ComboBox dalam frmBarang:
  1. Private Sub buka(ByVal t As Boolean)  
  2.         Dim daftarTextBox = From myControl In Me.Controls _  
  3.                             Where TypeOf myControl Is TextBox _  
  4.                             Select myControl  
  5.   
  6.         For Each myTeksBoks As TextBox In daftarTextBox  
  7.             If t Then  
  8.                 myTeksBoks.Enabled = True  
  9.                 Me.cmbKodeKategori.Enabled = True  
  10.             Else  
  11.                 myTeksBoks.Enabled = False  
  12.                 Me.cmbKodeKategori.Enabled = False  
  13.             End If  
  14.         Next  
  15.     End Sub  

1.b. Sub Procedure isiCombo
Digunakan untuk mengisi daftar kategori untuk ComboBox pada frmBarang:
  1. Private Sub isiCombo()  
  2.     Me.cmbKodeKategori.ResetText()  
  3.     Dim cmbKate = From kategori In db.kategoris _  
  4.                  Select kategori.NmKategori  
  5.   
  6.     For Each kate As String In cmbKate  
  7.         Me.cmbKodeKategori.Items.Add(kate)  
  8.     Next  
  9. End Sub  

1.c. Sub Procedure resData
Digunakan untuk me-refresh (mengisi) data dalam DataGridView1 dengan data yang baru (Kodenya sedikit berbeda dari tutorial 2 kemarin):
  1. Private Sub resData()  
  2.     Dim qBarang = From barang In db.barangs _  
  3.                   Join kategori In db.kategoris _  
  4.                   On kategori.KDKategori Equals barang.KDKategori _  
  5.                   Select Kode = barang.KDBarang, Nama = barang.NmBarang, _  
  6.                   Kategori = kategori.NmKategori, Jumlah = barang.Jumlah, Harga = barang.HargaJual  
  7.   
  8.     Me.DataGridView1.DataSource = qBarang  
  9. End Sub  

1.d. Sub Procedure dgKlik
Digunakan untuk mengisi tiap TextBox dan ComboBox berdasarkan data yang ada dalam DataGridView1 saat setiap kali data dalam DataGridView1 dipilih.
  1. Private Sub dgKlik()  
  2.     Try  
  3.         Me.txtKodeBarang.Text = Me.DataGridView1.Item(0, Me.DataGridView1.CurrentRow.Index).Value  
  4.         Me.txtNamaBarang.Text = Me.DataGridView1.Item(1, Me.DataGridView1.CurrentRow.Index).Value  
  5.         Me.txtJumlah.Text = Me.DataGridView1.Item(3, Me.DataGridView1.CurrentRow.Index).Value  
  6.         Me.txtHarga.Text = Me.DataGridView1.Item(4, Me.DataGridView1.CurrentRow.Index).Value  
  7.   
  8.         Dim dkate = From kategori In db.kategoris _  
  9.                     Where kategori.NmKategori Is Me.DataGridView1.Item(2, Me.DataGridView1.CurrentRow.Index).Value _  
  10.                     Select kategori.NmKategori  
  11.         Me.cmbKodeKategori.Text = dkate.Single  
  12.   
  13.     Catch ex As Exception  
  14.         MessageBox.Show("Error: " & ex.Message)  
  15.     End Try  
  16. End Sub  

1.e. Sub Procedure resTeks
Digunakan untuk mengosongkan semua TextBox dan Combobox dalam frmBarang :
  1. Private Sub resTeks()  
  2.     isiCombo()  
  3.     Dim daftarTextBox = From myControl In Me.Controls _  
  4.                         Where TypeOf myControl Is TextBox _  
  5.                         Select myControl  
  6.     For Each myTeksBoks As TextBox In daftarTextBox  
  7.         myTeksBoks.Text = ""  
  8.     Next  
  9. End Sub  

1.f. Function katPerNama
Digunakan untuk mengambil kode Kategori barang berdasarkan nama kategorinya :
  1. Private Function katPerNama(ByVal n As StringAs Integer  
  2.         Dim kat As Integer = 0  
  3.         Dim kate = From kategori In db.kategoris _  
  4.                  Where kategori.NmKategori Is n _  
  5.                  Select kategori.KDKategori  
  6.         kat = kate.Single  
  7.         Return kat  
  8.     End Function  

2. DataGridView1_Click
Pada designer view, double klik Control DataGridView1 > akan masuk ke dalam tampilan Code View.  Pada bagian Method Name, pilih Click. Lihat Gambar :
DataGridView1_Method
Ketikkan kode berikut pada bagian  DataGridView1_Click :
  1. Private Sub DataGridView1_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles DataGridView1.Click  
  2.     dgKlik()  
  3. End Sub  

3. Sub Procedure Saat Tombol Edit Diklik
Double klik tombol edit dan masukkan kode berikut :
  1. Private Sub cmdEdit_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles cmdEdit.Click  
  2.     Me.cmdBaru.Text = "Batal"  
  3.     Me.cmdEdit.Enabled = False  
  4.     Me.cmdHapus.Enabled = False  
  5.     Me.cmdSimpan.Enabled = True  
  6.     edit = True  
  7.     buka(True)  
  8.     Me.txtKodeBarang.Enabled = False  
  9.     Me.txtNamaBarang.Focus()  
  10. End Sub  

4. Sub Procedure Saat Tombol Baru Diklik
Double klik tombol baru dan masukkan kode berikut :
  1. Private Sub cmdBaru_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles cmdBaru.Click  
  2.     If Me.cmdBaru.Text = "Baru" Then  
  3.         Me.cmdBaru.Text = "Batal"  
  4.         Me.resTeks()  
  5.         buka(True)  
  6.         Me.DataGridView1.Enabled = False  
  7.         Me.cmdSimpan.Enabled = True  
  8.         Me.cmdEdit.Enabled = False  
  9.         Me.cmdHapus.Enabled = False  
  10.         Me.cmdKeluar.Enabled = False  
  11.         Me.txtKodeBarang.Focus()  
  12.     Else  
  13.         Me.cmdBaru.Text = "Baru"  
  14.         buka(False)  
  15.         Me.DataGridView1.Enabled = True  
  16.         edit = False  
  17.         Me.cmdSimpan.Enabled = False  
  18.         Me.cmdEdit.Enabled = True  
  19.         Me.cmdHapus.Enabled = True  
  20.         Me.cmdKeluar.Enabled = True  
  21.         dgKlik()  
  22.     End If  
  23. End Sub  

5. Sub Procedure Saat Tombol Simpan Diklik
Double klik tombol simpan dan masukkan kode berikut :
  1. Private Sub cmdSimpan_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles cmdSimpan.Click  
  2.     'Validasi data inputan, akan dijelaskan nanti...  
  3.   
  4.     If edit Then  
  5.         Dim updatebrg = (From barang In db.barangs _  
  6.                 Where barang.KDBarang = Me.txtKodeBarang.Text).ToList()(0)  
  7.   
  8.         With updatebrg  
  9.             .NmBarang = Me.txtNamaBarang.Text  
  10.             .KDKategori = katPerNama(Me.cmbKodeKategori.Text)  
  11.             .Jumlah = Me.txtJumlah.Text  
  12.             .HargaJual = Me.txtHarga.Text  
  13.         End With  
  14.   
  15.     Else  
  16.         Dim brg As New barang With { _  
  17.                 .KDBarang = Me.txtKodeBarang.Text, _  
  18.                 .NmBarang = Me.txtNamaBarang.Text, _  
  19.                 .KDKategori = katPerNama(Me.cmbKodeKategori.Text), _  
  20.                 .Jumlah = Me.txtJumlah.Text, _  
  21.                 .HargaJual = Me.txtHarga.Text}  
  22.     End If  
  23.   
  24.     Try  
  25.         db.SubmitChanges()  
  26.   
  27.     Catch ex As Exception  
  28.         MessageBox.Show("Error :" & ex.Message)  
  29.     End Try  
  30.   
  31.     resData()  
  32.     dgKlik()  
  33.     buka(False)  
  34.     Me.cmdSimpan.Enabled = False  
  35.     Me.cmdBaru.Text = "Baru"  
  36.     Me.cmdEdit.Enabled = True  
  37.     Me.cmdKeluar.Enabled = True  
  38.     edit = False  
  39.     Me.cmdHapus.Enabled = True  
  40.     Me.DataGridView1.Enabled = True  
  41. End Sub  

6. Sub Procedure Saat Tombol Hapus Diklik
Double klik tombol hapus dan masukkan kode berikut :
  1. Private Sub cmdHapus_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles cmdHapus.Click  
  2.     If Me.txtKodeBarang.Text = "" Then Exit Sub  
  3.     Dim rep As Integer = MessageBox.Show("Data tersebut akan dihapus?""Konfirmasi", MessageBoxButtons.YesNo, MessageBoxIcon.Question)  
  4.     If rep = MsgBoxResult.No Then Exit Sub  
  5.   
  6.     Dim deleteBrg = (From barang In db.barangs _  
  7.                 Where barang.KDBarang = Me.txtKodeBarang.Text).ToList()(0)  
  8.   
  9.     db.barangs.DeleteOnSubmit(deleteBrg)  
  10.   
  11.     Try  
  12.         db.SubmitChanges()  
  13.     Catch ex As Exception  
  14.         MessageBox.Show("Error :" & ex.Message)  
  15.     End Try  
  16.   
  17.     resData()  
  18.     dgKlik()  
  19.   
  20. End Sub  

7. Sub Procedure Saat Tombol Keluar Diklik
Double klik tombol keluar dan masukkan kode berikut :
  1. Private Sub cmdKeluar_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles cmdKeluar.Click  
  2.     Me.Close()  
  3. End Sub  

Terakhir, tambahkan kode berikut pada bagian frmBarang_Load :
  1. Private Sub frmBarang_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load  
  2.     resData()  
  3.     isiCombo()  
  4.     buka(False)  
  5.     Me.cmdSimpan.Enabled = False  
  6. t = False  
  7. End Sub  

Yups, dengan semua tombol telah memiliki kode masing-masing, coba jalankan program dengan mengklik tanda play  atau menekan tombol F5 pada keyboard.
Pada bagian selanjutnya kita akan langsung mencoba membuat form untuk menampilkan data laporan dari data barang yang barusan dibuat..
Selamat bereksperimen semoga sukses... ;)
Kode Selengkapnya :
  1. Public Class frmBarang  
  2.     Private db As New DataClasses1DataContext  
  3.     Private edit As Boolean 'penentuan apakah sedang dalam proses edit atau bukan  
  4.   
  5.     Private Sub frmBarang_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load  
  6.         resData() 'memanggil sub resData untuk mengisi data ke dalam DataGridView1  
  7.         isiCombo() 'mengisi ComboBox kategori  
  8.         buka(False'kunci semua textbox  
  9.         Me.cmdSimpan.Enabled = False 'matikan tombol simpan  
  10.         edit = False 'variabel edit di atur menjadi false  
  11.     End Sub  
  12.     Private Sub buka(ByVal t As Boolean'enable dan disable control TextBox dan ComboBox  
  13.         'Pilih semua control yang merupakan TextBox  
  14.         Dim daftarTextBox = From myControl In Me.Controls _  
  15.                             Where TypeOf myControl Is TextBox _  
  16.                             Select myControl  
  17.         'Looping setiap control TextBox  
  18.         For Each myTeksBoks As TextBox In daftarTextBox  
  19.             If t Then  
  20.                 myTeksBoks.Enabled = True 'textbox aktif  
  21.                 Me.cmbKodeKategori.Enabled = True 'combobox aktif  
  22.             Else  
  23.                 myTeksBoks.Enabled = False  
  24.                 Me.cmbKodeKategori.Enabled = False  
  25.             End If  
  26.         Next  
  27.     End Sub  
  28.     Private Sub isiCombo() 'Mengisi Combobox dengan daftar kategori dari tabel kategori  
  29.         Me.cmbKodeKategori.ResetText() 'reset Combo kategori  
  30.         'ambil semua nama kategori dari tabel kategori  
  31.         Dim cmbKate = From kategori In db.kategoris _  
  32.                      Select kategori.NmKategori  
  33.         'looping setiap hasil dari cmbkate dan tambahkan ke dalam combo kategori  
  34.         For Each kate As String In cmbKate  
  35.             Me.cmbKodeKategori.Items.Add(kate)  
  36.         Next  
  37.     End Sub  
  38.     Private Sub resData() 'mengisi ulang data ke dalam DataGridView1  
  39.         Dim qBarang = From barang In db.barangs _  
  40.                       Join kategori In db.kategoris _  
  41.                       On kategori.KDKategori Equals barang.KDKategori _  
  42.                       Select Kode = barang.KDBarang, Nama = barang.NmBarang, _  
  43.                       Kategori = kategori.NmKategori, Jumlah = barang.Jumlah, Harga = barang.HargaJual  
  44.   
  45.         Me.DataGridView1.DataSource = qBarang  
  46.     End Sub  
  47.     Private Sub resTeks() 'mengosongkan semua combobox dan textbox  
  48.         isiCombo()  
  49.         Dim daftarTextBox = From myControl In Me.Controls _  
  50.                             Where TypeOf myControl Is TextBox _  
  51.                             Select myControl  
  52.   
  53.         For Each myTeksBoks As TextBox In daftarTextBox  
  54.             myTeksBoks.Text = ""  
  55.         Next  
  56.     End Sub  
  57.     Private Sub dgKlik() 'sub procedure saat baris dalam DataGridView1 diklik  
  58.         Try  
  59.             Me.txtKodeBarang.Text = Me.DataGridView1.Item(0, Me.DataGridView1.CurrentRow.Index).Value  
  60.             Me.txtNamaBarang.Text = Me.DataGridView1.Item(1, Me.DataGridView1.CurrentRow.Index).Value  
  61.             Me.txtJumlah.Text = Me.DataGridView1.Item(3, Me.DataGridView1.CurrentRow.Index).Value  
  62.             Me.txtHarga.Text = Me.DataGridView1.Item(4, Me.DataGridView1.CurrentRow.Index).Value  
  63.   
  64.             'isi combo kategori berdasarkan kategori tiap barang dari DataGridView1  
  65.             Dim dkate = From kategori In db.kategoris _  
  66.                         Where kategori.NmKategori Is Me.DataGridView1.Item(2, Me.DataGridView1.CurrentRow.Index).Value _  
  67.                         Select kategori.NmKategori  
  68.             Me.cmbKodeKategori.Text = dkate.Single  
  69.   
  70.         Catch ex As Exception 'Jika terjadi error, ya know lah...  
  71.             MessageBox.Show("Error: " & ex.Message)  
  72.         End Try  
  73.     End Sub  
  74.   
  75.     Private Function katPerNama(ByVal n As StringAs Integer 'mengambil kode kategori berdasarkan nama kategori  
  76.         Dim kat As Integer = 0  
  77.         Dim kate = From kategori In db.kategoris _  
  78.                  Where kategori.NmKategori Is n _  
  79.                  Select kategori.KDKategori  
  80.   
  81.         kat = kate.Single  
  82.         Return kat  
  83.     End Function  
  84.     Private Sub DataGridView1_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles DataGridView1.Click  
  85.         dgKlik() 'memanggil sub procedure dgKlik saat DataGridView1 diklik.  
  86.     End Sub  
  87.   
  88.     Private Sub cmdEdit_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles cmdEdit.Click  
  89.         'saat tombol edit diklik  
  90.         Me.cmdBaru.Text = "Batal"  
  91.         Me.cmdEdit.Enabled = False  
  92.         Me.cmdHapus.Enabled = False  
  93.         Me.cmdSimpan.Enabled = True  
  94.         edit = True 'sedang dalam proses edit  
  95.         buka(True'buka semua control  
  96.         Me.txtKodeBarang.Enabled = False 'kunci txtKodeBarang  
  97.         Me.txtNamaBarang.Focus() 'Fokuskan cursor pada txtNamaBarang  
  98.     End Sub  
  99.   
  100.     Private Sub cmdBaru_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles cmdBaru.Click  
  101.         'Tombol baru diklik  
  102.         'lakukan pengeceka apakah sekarang tombol baru atau tombol batal  
  103.         If Me.cmdBaru.Text = "Baru" Then 'jika yang diklik tombol baru  
  104.             Me.cmdBaru.Text = "Batal" 'ubah text tombol baru menjadi batal  
  105.             Me.resTeks() 'memanggil sub procedure resTeks : mengosongkan semua teks  
  106.             buka(True'buka semua control  
  107.             Me.DataGridView1.Enabled = False 'non aktifkan DataGridView1 sehingga tidak bisa diklik   
  108.             Me.cmdSimpan.Enabled = True  
  109.             Me.cmdEdit.Enabled = False  
  110.             Me.cmdHapus.Enabled = False  
  111.             Me.cmdKeluar.Enabled = False  
  112.             Me.txtKodeBarang.Focus() 'Fokuskan cursor pada txtKodeBarang  
  113.         Else 'jika yang diklik adalah tombol baru dengan teks Batal  
  114.             Me.cmdBaru.Text = "Baru" 'ubah teks tombol baru menjadi Baru  
  115.             buka(False'Kunci semua kontrol  
  116.             Me.DataGridView1.Enabled = True  
  117.             edit = False 'pastikan bukan dalam proses edit  
  118.             Me.cmdSimpan.Enabled = False  
  119.             Me.cmdEdit.Enabled = True  
  120.             Me.cmdHapus.Enabled = True  
  121.             Me.cmdKeluar.Enabled = True  
  122.             dgKlik()  
  123.         End If  
  124.     End Sub  
  125.   
  126.     Private Sub cmdSimpan_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles cmdSimpan.Click  
  127.         'Validasi data inputan, belakangan akan dijelaskan...  
  128.   
  129.         If edit Then 'jika dalam proses edit / tombol edit diklik  
  130.             Dim updatebrg = (From barang In db.barangs _  
  131.                     Where barang.KDBarang = Me.txtKodeBarang.Text).ToList()(0)  
  132.   
  133.             With updatebrg  
  134.                 .NmBarang = Me.txtNamaBarang.Text  
  135.                 .KDKategori = katPerNama(Me.cmbKodeKategori.Text)  
  136.                 .Jumlah = Me.txtJumlah.Text  
  137.                 .HargaJual = Me.txtHarga.Text  
  138.             End With  
  139.   
  140.         Else 'jika bukan proses edit / tombol baru diklik  
  141.             Dim brg As New barang With { _  
  142.                     .KDBarang = Me.txtKodeBarang.Text, _  
  143.                     .NmBarang = Me.txtNamaBarang.Text, _  
  144.                     .KDKategori = katPerNama(Me.cmbKodeKategori.Text), _  
  145.                     .Jumlah = Me.txtJumlah.Text, _  
  146.                     .HargaJual = Me.txtHarga.Text}  
  147.         End If  
  148.   
  149.         Try  
  150.             db.SubmitChanges() 'simpan semua perubahan, baik itu proses update maupun insert  
  151.   
  152.         Catch ex As Exception  
  153.             MessageBox.Show("Error :" & ex.Message)  
  154.         End Try  
  155.   
  156.         resData()  
  157.         dgKlik()  
  158.         buka(False)  
  159.         Me.cmdSimpan.Enabled = False  
  160.         Me.cmdBaru.Text = "Baru"  
  161.         Me.cmdEdit.Enabled = True  
  162.         Me.cmdKeluar.Enabled = True  
  163.         edit = False  
  164.         Me.cmdHapus.Enabled = True  
  165.         Me.DataGridView1.Enabled = True  
  166.     End Sub  
  167.   
  168.     Private Sub cmdHapus_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles cmdHapus.Click  
  169.         'saat tombol hapus diklik  
  170.         If Me.txtKodeBarang.Text = "" Then Exit Sub 'jika kodebarang kosong, keluar dari sub procedure  
  171.         'mencoba memastikan apakah data akan benar2 dihapus?  
  172.         Dim rep As Integer = MessageBox.Show("Data tersebut akan dihapus?""Konfirmasi", MessageBoxButtons.YesNo, MessageBoxIcon.Question)  
  173.         If rep = MsgBoxResult.No Then Exit Sub 'jika hasilnya NO, data tidak akan dihapus  
  174.   
  175.         Dim deleteBrg = (From barang In db.barangs _  
  176.                     Where barang.KDBarang = Me.txtKodeBarang.Text).ToList()(0)  
  177.   
  178.         db.barangs.DeleteOnSubmit(deleteBrg)  
  179.   
  180.         Try  
  181.             db.SubmitChanges() 'simpan semua perubahan ke dalam database  
  182.         Catch ex As Exception  
  183.             MessageBox.Show("Error :" & ex.Message)  
  184.         End Try  
  185.   
  186.         resData()  
  187.         dgKlik()  
  188.   
  189.     End Sub  
  190.   
  191.     Private Sub cmdKeluar_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles cmdKeluar.Click  
  192.         Me.Close() 'tutup form  
  193.         'bisa juga menggunakan : Application.Exit()  
  194.     End Sub  
  195. End Class  

Sorry kalau masih ada yang keliru atau kesalahan dalam proses penulisan di atas..mohon koreksinya juga..