Ok, sorry rada telat postingnya.. kemarin sempat ada proyek n juga beberapa hari kemarin lagi sakit.
Langsung aja, ditutorial ke-2kemarin 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:
view plaincopy to clipboardprint?
1. Public Class frmBarang
2.
3. Private Sub frmBarang_Load(ByVal sender As System.Object, ByVal 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 :
view plaincopy to clipboardprint?
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:
view plaincopy to clipboardprint?
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:
view plaincopy to clipboardprint?
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):
view plaincopy to clipboardprint?
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.
view plaincopy to clipboardprint?
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 :
view plaincopy to clipboardprint?
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 :
view plaincopy to clipboardprint?
1. Private Function katPerNama(ByVal n As String) As 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 :
Ketikkan kode berikut pada bagian DataGridView1_Click :
view plaincopy to clipboardprint?
1. Private Sub DataGridView1_Click(ByVal sender As Object, ByVal 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 :
view plaincopy to clipboardprint?
1. Private Sub cmdEdit_Click(ByVal sender As System.Object, ByVal 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 :
view plaincopy to clipboardprint?
1. Private Sub cmdBaru_Click(ByVal sender As System.Object, ByVal 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 :
view plaincopy to clipboardprint?
1. Private Sub cmdSimpan_Click(ByVal sender As System.Object, ByVal 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 :
view plaincopy to clipboardprint?
1. Private Sub cmdHapus_Click(ByVal sender As System.Object, ByVal 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 :
view plaincopy to clipboardprint?
1. Private Sub cmdKeluar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdKeluar.Click
2. Me.Close()
3. End Sub
Terakhir, tambahkan kode berikut pada bagian frmBarang_Load :
view plaincopy to clipboardprint?
1. Private Sub frmBarang_Load(ByVal sender As System.Object, ByVal 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 :
view plaincopy to clipboardprint?
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.Object, ByVal 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 String) As 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 Object, ByVal 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.Object, ByVal 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.Object, ByVal 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.Object, ByVal 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.Object, ByVal 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.Object, ByVal 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.. heheh..e