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