Jumat, 25 November 2011

:: Menampilkan Database ke ListView di Visual Basic ::

Menampilkan data dari database MS Access ke dalam control ListView dan memungkinkan untuk penyortiran data pada setiap field atau kolom di ListView jika header ybt diklik. Menggunakan reference "Microsoft ActiveX Data Objects 2.0 Library" untuk coding database, dan control "Microsoft Windows Common Control 6.0" untuk control ListView. 1. Buat 1 Project baru dengan 1 Form. 2. Tambahkan reference dan component sesuai dengayang disebutkan di atas. 3. Tambahkan satu ListView ke dalam form, beri nama ListView ini dengan LV. 4. Copy-kan coding berikut ke dalam editor form ybt. '--------------------------------------------------------------- Private Sub Form_Load() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset 'Buka koneksi ke database... cn.Open "Provider=Microsoft.Jet.OLEDB.3.51;" _ & "Data Source=" & _ App.Path & "Data.mdb" 'Buka tabel "Orders" rs.Open "Orders", cn, adOpenForwardOnly, adLockReadOnly 'Tentukan tampilan ListView... LV.View = lvwReport 'Jangan lupa yang ini...! 'Ambil data dari recordset... LoadListViewFromRecordset LV, rs 'Atur ukuran/lebar kolom di setiap listview... ListViewAdjustColumnWidth LV, True End Sub Sub LoadListViewFromRecordset(LV As ListView, _ rs As ADODB.Recordset, Optional MaxRecords As Long) 'Prosedur mengambil data dari Recordset (tabel database) Dim fld As ADODB.Field, alignment As Integer Dim recCount As Long, i As Long, fldName As String Dim li As ListItem 'Bersihkan isi dari ListView. LV.ListItems.Clear LV.ColumnHeaders.Clear 'Buat kumpulan ColumnHeader. For Each fld In rs.Fields 'Menyaring tipe field untuk keperluan 'perataan tampilan teks di ListView Select Case fld.Type Case adBoolean, adCurrency, adDate, adDecimal, adDouble alignment = lvwColumnRight Case adInteger, adNumeric, adSingle, adSmallInt, adVarNumeric alignment = lvwColumnRight Case adBSTR, adChar, adVarChar, adVariant alignment = lvwColumnLeft Case Else alignment = -1 'Berarti: "Unsupported field type". 'atau tipe field tdk mendukung End Select 'Jika tipe field OK, buat sebuah kolom 'dengan perataan (alignment) yang benar. If alignment <> -1 Then 'Kolom pertama haruslah rata kiri. If LV.ColumnHeaders.Count = 0 Then alignment = lvwColumnLeft LV.ColumnHeaders.Add , , fld.Name, fld.DefinedSize * 200, _ alignment End If Next 'Keluar jika tidak ada field yg dapat ditampilkan. If LV.ColumnHeaders.Count = 0 Then Exit Sub 'Tambahkan semua records dalam recordset. rs.MoveFirst Do Until rs.EOF recCount = recCount + 1 'Tambahkan object utama ListItem. fldName = LV.ColumnHeaders(1).Text Set li = LV.ListItems.Add(, , rs.Fields(fldName) & "") 'Tambahkan semua sub (ListSubItems.Add). For i = 2 To LV.ColumnHeaders.Count fldName = LV.ColumnHeaders(i) li.ListSubItems.Add , , rs.Fields(fldName) & "" Next If recCount = MaxRecords Then Exit Do rs.MoveNext Loop End Sub Sub ListViewAdjustColumnWidth(LV As ListView, _ Optional AccountForHeaders As Boolean) 'Prosedur untuk menyesuaikan ukuran/lebar kolom ListView Dim row As Long, col As Long Dim width As Single, maxWidth As Single Dim saveFont As StdFont, saveScaleMode As Integer, cellText As String 'Langsung keluar dari prosedur jika tidak ada 'items yang akan ditampilkan. If LV.ListItems.Count = 0 Then Exit Sub 'Simpan huruf yang digunakan oleh form, 'dan sesuaikan ke huruf di ListView. 'Kita membutuhkan ini dengan tujuan untuk 'menggunakan metode dari TextWidth milik form. Set saveFont = LV.Parent.Font Set LV.Parent.Font = LV.Font 'Sesuaikan ScaleMode = vbTwips untuk form (parent). saveScaleMode = LV.Parent.ScaleMode LV.Parent.ScaleMode = vbTwips For col = 1 To LV.ColumnHeaders.Count maxWidth = 0 If AccountForHeaders Then maxWidth = LV.Parent.TextWidth(LV.ColumnHeaders(col).Text) + 200 End If For row = 1 To LV.ListItems.Count 'Ambil teks dari ListItems atau ListSubItems. If col = 1 Then cellText = LV.ListItems(row).Text Else cellText = LV.ListItems(row).ListSubItems(col - 1).Text End If 'Hitung lebarnya, dan tetapkan untuk batas. 'Catatan: Tidak berlaku untuk "multiple-line text fields" 'atau teks yang fieldnya mengandung dari banyak baris. width = LV.Parent.TextWidth(cellText) + 200 'Update lebar maksimum jika kita menemukan 'sebuah string yang lebih lebar. If width > maxWidth Then maxWidth = width Next 'Ubah lebar kolom sekarang... LV.ColumnHeaders(col).width = maxWidth Next 'Ganti property parent milik ListView Set LV.Parent.Font = saveFont LV.Parent.ScaleMode = saveScaleMode End Sub Private Sub Form_Resize() 'coding ini shrsnya jika error lanjut saja, sengaja dihilangkan spy dapat diupload ke brinkster LV.Move 0, 0 LV.Height = Me.ScaleHeight - 250 LV.width = Me.ScaleWidth - 20 End Sub 'Menyortir data di ListView jika header kolom ybt 'diklik Private Sub LV_ColumnClick(ByVal ColumnHeader As _ MSComctlLib.ColumnHeader) 'Urutkan data berdasarkan di kolom ybt... If LV.Sorted And _ ColumnHeader.Index - 1 = LV.SortKey Then 'Telah diurutkan di kolom ini, 'balikkan urutan sortir. LV.SortOrder = 1 - LV.SortOrder Else LV.SortOrder = lvwAscending LV.SortKey = ColumnHeader.Index - 1 End If LV.Sorted = True End Sub
Scroll to top