Kumpulan Tips and Triks untuk Berbagai Keperluan (Dari Berbagai Sumber)
Tekuni dan Dalami apa yang anda kerjakan sekarang, karena itu merupakan jalan hidup anda, walaupun itu jauh dari cita-cita anda sebelumnya (Syafruddin 07/07/2013)
Jumat, 01 September 2023
Selasa, 07 November 2017
Sub Total dan Grand Total di Datagridview VB.net
Setelah lama vacum dari blogger, tiba2 teman menanyakan bagaimana caranya membuat Sub Total dan Grand Total di Datagridview seperti dibawah ini
cara memanggilnya sebagai berikut
ClearSubTotalDGV(dgv)
SubTotalDGV(dgv, 1, 2, Color.Aquamarine)
SubTotalDGV(dgv, 1, 3, Color.Aquamarine)
GrandTotalDGV(dgv, 2, Color.Yellow)
GrandTotalDGV(dgv, 3, Color.Yellow)
Silahkan dicoba procedure diatas semoga bisa bermanfaat
Syafruddin
setelah dicoba-coba akhirnya dapat procedure seperti dibawah ini. Procedurenya simpan di modul
ini procedure SubTotal
Public Sub SubTotalDGV(dgv As DataGridView, GroupOn As Integer, TotalOn As Integer, Warna As Color)
Dim clST As New DataGridViewTextBoxColumn
Dim clSTID As New DataGridViewTextBoxColumn
Dim Total As Double = 0
Dim SubTotalID As String = ""
Dim i As Integer = 0
If dgv.Rows.Count = 0 Then Exit Sub
With clST
.HeaderText = "SubTotalID"
.Name = "SubTotalID"
.Width = 120
.ReadOnly = True
.Visible = False
End With
With clSTID
.HeaderText = "KodeAsal"
.Name = "KodeAsal"
.Width = 120
.ReadOnly = True
.Visible = False
End With
If dgv.Columns.Contains("SubTotalID") = False Then dgv.Columns.Add(clST)
If dgv.Columns.Contains("KodeAsal") = False Then dgv.Columns.Add(clSTID)
For k As Integer = 0 To dgv.Rows.Count - 1
If dgv.Rows(k).Cells("SubTotalID").Value Is Nothing Then
dgv.Rows(k).Cells("SubTotalID").Value = "0"
dgv.Rows(k).Cells("KodeAsal").Value = dgv.Rows(k).Cells(GroupOn).Value
End If
Next
SubTotalID = dgv.Rows(0).Cells(GroupOn).Value.ToString
Do
If SubTotalID = dgv.Rows(i).Cells("KodeAsal").Value.ToString And dgv.Rows(i).Cells("SubTotalID").Value.ToString = "0" Then
Total += Convert.ToDouble(dgv.Rows(i).Cells(TotalOn).Value)
Else
If dgv.Rows(i).Cells("SubTotalID").Value.ToString = "0" Then
dgv.Rows.Insert(i, 1)
End If
dgv.Rows(i).Cells(TotalOn).Value = Total
dgv.Rows(i).Cells("SubTotalID").Value = "1"
dgv.Rows(i).Cells("KodeAsal").Value = SubTotalID
dgv.Rows(i).DefaultCellStyle.BackColor = Warna
If (i) < dgv.Rows.Count - 1 Then
i += 1
SubTotalID = dgv.Rows(i).Cells(GroupOn).Value.ToString
Total = (Convert.ToDouble(dgv.Rows(i).Cells(TotalOn).Value))
End If
End If
If dgv.Rows.Count - 1 = (i) Then
If dgv.Rows(i).Cells("SubTotalID").Value.ToString = "0" Then
dgv.Rows.Insert(i + 1, 1)
dgv.Rows(i + 1).Cells(TotalOn).Value = Total
dgv.Rows(i + 1).Cells("SubTotalID").Value = "1"
dgv.Rows(i + 1).Cells("KodeAsal").Value = SubTotalID
dgv.Rows(i + 1).DefaultCellStyle.BackColor = Warna
Else
dgv.Rows(i).Cells(TotalOn).Value = Total
dgv.Rows(i).Cells("SubTotalID").Value = "1"
dgv.Rows(i).Cells("KodeAsal").Value = SubTotalID
dgv.Rows(i).DefaultCellStyle.BackColor = Warna
End If
Exit Do
End If
i += 1
Loop Until (i) > dgv.Rows.Count - 1
End Sub
ini Procedure Grand Total
Public Sub GrandTotalDGV(dgv As DataGridView, TotalOn As Integer, Warna As Color)
Dim Total As Double = 0
If dgv.Columns.Contains("SubTotalID") = False Then
dgv.Columns.Add("SubTotalID", "SubTotalID")
dgv.Columns("SubTotalID").Visible = False
For k As Integer = 0 To dgv.Rows.Count - 1
If dgv.Rows(k).Cells("SubTotalID").Value Is Nothing Then
dgv.Rows(k).Cells("SubTotalID").Value = "0"
End If
Next
End If
For i As Integer = 0 To dgv.Rows.Count - 1
If dgv.Rows(i).Cells("SubTotalID").Value.ToString = "0" Then
Total += Convert.ToDouble(dgv.Rows(i).Cells(TotalOn).Value)
End If
Next
Dim x As Integer = dgv.Rows.Count - 1
If dgv.Rows(dgv.Rows.Count - 1).Cells("SubTotalID").Value.ToString = "2" Then
dgv.Rows(x).Cells(TotalOn).Value = Total
dgv.Rows(x).DefaultCellStyle.BackColor = Warna
Else
dgv.Rows.Insert(x + 1, 1)
dgv.Rows(x + 1).Cells(TotalOn).Value = Total
dgv.Rows(x + 1).Cells("SubTotalID").Value = "2"
dgv.Rows(x + 1).DefaultCellStyle.BackColor = Warna
End If
End Sub
Ini Procedure untuk menghapus Sub Total dan Grand Total
Public Sub ClearSubTotalDGV(dgv As DataGridView)
For i As Integer = dgv.Rows.Count - 1 To 0 Step -1
If dgv.Columns.Contains("SubTotalID") = True Then
If dgv.Rows(i).Cells("SubTotalID").Value.ToString <> "0" Then
dgv.Rows.RemoveAt(i)
End If
End If
Next
If dgv.Columns.Contains("SubTotalID") = True Then dgv.Columns.Remove("SubTotalID")
If dgv.Columns.Contains("KodeAsal") = True Then dgv.Columns.Remove("KodeAsal")
End Sub
ClearSubTotalDGV(dgv)
SubTotalDGV(dgv, 1, 2, Color.Aquamarine)
SubTotalDGV(dgv, 1, 3, Color.Aquamarine)
GrandTotalDGV(dgv, 2, Color.Yellow)
GrandTotalDGV(dgv, 3, Color.Yellow)
Silahkan dicoba procedure diatas semoga bisa bermanfaat
Syafruddin
Senin, 15 September 2014
Membuat dan Menambah Data di DataSet di VB.net
Sumber : http://angkringankode.wordpress.com/2011/03/23/membuat-dan-menambah-data-di-dataset/
http://angkringankode.wordpress.com/2010/01/19/membuat-file-excel-dari-datatable/
http://angkringankode.wordpress.com/2009/10/14/transfer-data-dari-excell-ke-database/
Dataset adalah objek yang merepresentasikan data dan relasinya di memory. Strukturnya mirip dengan data di database. Dataset berisi koleksi dari datatable dan datarelation. Berikut adalah contoh dataset sederhana. Dataset Administrasi terdiri dari 2 datatable, Propinsi dan Kabupaten. Kedua datatable saling berhubungan melalui datarelation ‘propinsi-kabupaten’.
Biasanya relasi tabel seperti ini dibuat di database. Untuk dataset, bisa dibuat secara langsung menggunakan schema dengan menambahkan file dataset (xsd) di aplikasi. Baca artikel saya yang ini. Berikut ini adalah cara lain untuk membuat dataset, by code, berdasarkan diagram diatas.
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
28
29
30
31
| Private Function GetDataSet() As dataset 'buat dataset baru dengan nama 'Administrasi' Dim adm As New DataSet( "Administrasi" ) 'buat datatable di dalam dataset dengan nama 'propinsi' Dim propinsi As DataTable = adm.Tables.Add( "Propinsi" ) 'buat kolom2 dalam tabel propinsi propinsi.Columns.Add( "id" , GetType ( Integer )) propinsi.Columns.Add( "Nama" , GetType ( String )) 'set kolom id sebagai primary key propinsi.PrimaryKey = New DataColumn() {propinsi.Columns( "id" )} 'buat datatable kedua dalam dataset dengan nama 'kabupaten' Dim kabupaten As DataTable = adm.Tables.Add( "Kabupaten" ) 'buat kolom2 dalam tabel kabupaten kabupaten.Columns.Add( "idProp" , GetType ( Integer )) kabupaten.Columns.Add( "idKab" , GetType ( Integer )) kabupaten.Columns.Add( "Nama" , GetType ( String )) 'set kolom idprop dan idkab sebagai primary key kabupaten.PrimaryKey = New DataColumn() {kabupaten.Columns( "idProp" ), kabupaten.Columns( "idKab" )} 'buat relasi antara tabel propinsi dan kabupaten Dim Relasi As New DataRelation( "propinsi_kabupaten" , propinsi.Columns( "id" ), kabupaten.Columns( "idProp" )) adm.Relations.Add(Relasi) Return adm End Function |
Untuk menambahkan data kedalam datatable, tabel propinsi perlu diisi terlebih dahulu karena adanya relasi antara tabel propinsi dan kabupaten.
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
28
| Dim ds As DataSet = GetDataSet() Dim dtpropinsi As DataTable = ds.Tables( "Propinsi" ) Dim dtkabupaten As DataTable = ds.Tables( "Kabupaten" ) 'menambah data ke table propinsi Dim rowPropinsi As DataRow = dtpropinsi.NewRow() rowPropinsi( "id" ) = 31 rowPropinsi( "Nama" ) = "DKI Jakarta" dtpropinsi.Rows.Add(rowPropinsi) 'menambah data ke tabel kabupaten Dim rowkabupaten As DataRow = dtkabupaten.NewRow() rowkabupaten( "idProp" ) = 31 rowkabupaten( "idKab" ) = 71 rowkabupaten( "Nama" ) = "Jakarta Selatan" dtkabupaten.Rows.Add(rowkabupaten) rowkabupaten = dtkabupaten.NewRow() rowkabupaten( "idProp" ) = 31 rowkabupaten( "idKab" ) = 72 rowkabupaten( "Nama" ) = "Jakarta Timur" dtkabupaten.Rows.Add(rowkabupaten) rowkabupaten = dtkabupaten.NewRow() rowkabupaten( "idProp" ) = 31 rowkabupaten( "idKab" ) = 73 rowkabupaten( "Nama" ) = "Jakarta Pusat" dtkabupaten.Rows.Add(rowkabupaten) |
Contoh diatas berjalan dengan baik, datatable dan kolomnya diakses berdasarkan string nama. Namun jika nama tabel atau nama kolom salah tulis, pasti akan muncul error. Ini akan merepotkan kalau dataset yang dibuat cukup besar, karena nama tabel dan nama-nama kolom di datatable harus ditulis secara tepat.
Cara lain yang lebih aman adalah dengan membuat strong typed dataset. Dengan strong type dataset, nama tabel dan kolom akan dedefinisikan sebagai property. Sehingga untuk mengkases datatable propinsi menjadi
Dim dtpropinsi As DataTable = Admin.Propinsi
Untuk membuat strong typed dataset diperlukan XML Schema. Berdasarkan dataset yang kita buat sebelumnya, kita cukup menjalankan method WriteXmlSchema()
1
2
3
| Dim ds As DataSet = GetDataSet() Dim fileschema As String = Server.MapPath( "App_Code\Administrasi.xsd" ) ds.WriteXmlSchema(fileschema) |
Berikut contoh kode untuk menambahkan data ke dataset berdasarkan schema yang terbentuk.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| Dim admin As New Administrasi 'menambah data ke table propinsi Dim rowPropinsi As Administrasi.PropinsiRow = admin.Propinsi.AddPropinsiRow(31, "DKI Jakarta" ) 'menambah data ke tabel kabupaten Dim rowkabupaten As Administrasi.KabupatenRow = admin.Kabupaten.NewRow() rowkabupaten.PropinsiRow = rowPropinsi rowkabupaten.idKab = 71 rowkabupaten.Nama = "Jakarta Selatan" admin.Kabupaten.AddKabupatenRow(rowkabupaten) rowkabupaten = admin.Kabupaten.NewRow() rowkabupaten.PropinsiRow = rowPropinsi rowkabupaten.idKab = 72 rowkabupaten.Nama = "Jakarta Timur" admin.Kabupaten.AddKabupatenRow(rowkabupaten) rowkabupaten = admin.Kabupaten.NewRow() rowkabupaten.PropinsiRow = rowPropinsi rowkabupaten.idKab = 73 rowkabupaten.Nama = "Jakarta Pusat" admin.Kabupaten.AddKabupatenRow(rowkabupaten) |
Bandingkan antara cara kedua ini dengan cara pertama. Cara kedua lebih aman, karena untuk mengakses datatabel dan kolom tidak lagi mengacu pada string ‘nama’.
Masih banyak hal tentang dataset yang tidak ditulis disini. Semoga bisa dituliskan lain kali.
Masih banyak hal tentang dataset yang tidak ditulis disini. Semoga bisa dituliskan lain kali.
Semoga bermanfaat. Happy coding
Baca Juga dari Sumber diatas :http://angkringankode.wordpress.com/2010/01/19/membuat-file-excel-dari-datatable/
http://angkringankode.wordpress.com/2009/10/14/transfer-data-dari-excell-ke-database/
Langganan:
Postingan (Atom)