Pada postingan sebelumnya saya sudah membahas bagaimana membuat menu alternatif menggunakan komponen VBSmartMenu XP dan kali ini kita akan membahas bagaimana membuat menu menggunakan objek TreeView.
Objek TreeView digunakan untuk menampilkan data dalam bentuk Hirarki sehingga sangat cocok untuk menampilkan menu dalam jumlah banyak.
Pada pembahasan ini saya hanya membatasi untuk menampilkan menu 2 tingkat yaitu level 1 (menu induk) dan level 2 (menu anak), kedua menu tersebut akan disimpan didatabase Access dengan nama tabel MENU_INDUK dan MENU_ANAK.
Berikut adalah contoh rancangan tabelnya :
Gambar struktur tabel
Gambar relasi tabel
Contoh data
Untuk project VB sendiri kita akan tambahkan komponen (CTRL + T) Microsoft Windows Common Control 6.0 (SP6) kemudian tinggal drag komponen TreeView.
Oke jika semua data sudah siap tambahkan sebuah modul dan copy paste kode berikut :
Option Explicit
Public conn As ADODB.Connection
Public strSql As String
Public Function KonekToServer() As Boolean
Dim strConn As String
On Error GoTo errHandle
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\database.mdb"
Set conn = New ADODB.Connection
conn.ConnectionString = strConn
conn.Open
KonekToServer = True
Exit Function
errHandle:
KonekToServer = False
End Function
Public Function openRecordset(ByVal query As String) As ADODB.Recordset
Dim obj As ADODB.Recordset
Set obj = New ADODB.Recordset
obj.CursorLocation = adUseClient
obj.Open query, conn, adOpenForwardOnly, adLockReadOnly
Set openRecordset = obj
End Function
Public Sub closeRecordset(ByVal vRs As ADODB.Recordset)
If Not (vRs Is Nothing) Then
If vRs.State = adStateOpen Then vRs.Close
End If
Set vRs = Nothing
End Sub
Public Function getRecordCount(ByVal vRs As ADODB.Recordset) As Long
vRs.MoveLast
getRecordCount = vRs.RecordCount
vRs.MoveFirst
End Function
Adapun contoh prosedur untuk menambahkan data ke TreeView adalah sebagai berikut :
Private Sub addMenu()
Dim rsMenuInduk As ADODB.Recordset
Dim rsMenuAnak As ADODB.Recordset
Dim root As Node
Dim i As Long
Dim x As Long
Dim rowCount(1) As Long
mnuTree.Nodes.Clear
With mnuTree.Nodes
'menampilkan menu induk
strSql = "SELECT id, menu_name, menu_caption " & _
"FROM menu_induk " & _
"ORDER BY id"
Set rsMenuInduk = openRecordset(strSql)
If Not rsMenuInduk.EOF Then
rowCount(0) = getRecordCount(rsMenuInduk)
For i = 1 To rowCount(0)
Set root = .Add(, , rsMenuInduk("menu_name").Value, rsMenuInduk("menu_caption").Value)
root.Bold = True
'menampilkan menu anak
strSql = "SELECT menu_name, menu_caption " & _
"FROM menu_anak " & _
"WHERE menu_induk_id = " & rsMenuInduk("id").Value & " " & _
"ORDER BY id"
Set rsMenuAnak = openRecordset(strSql)
If Not rsMenuAnak.EOF Then
rowCount(1) = getRecordCount(rsMenuAnak)
For x = 1 To rowCount(1)
.Add root, tvwChild, rsMenuAnak("menu_name").Value, rsMenuAnak("menu_caption").Value
rsMenuAnak.MoveNext
Next x
End If
Call closeRecordset(rsMenuAnak)
rsMenuInduk.MoveNext
Next i
End If
Call closeRecordset(rsMenuInduk)
End With
For i = 1 To mnuTree.Nodes.Count
mnuTree.Nodes(i).Expanded = True
Next
End Sub
Kemudian kita tinggal panggil di event Form_Load
1234567891011121314
Private Sub Form_Load()
Dim ret As Boolean
ret = KonekToServer
'inisialisasi treeview
With mnuTree
.Style = tvwTreelinesPlusMinusText
.LineStyle = tvwRootLines
.Indentation = 300.47
End With
Call addMenu
End Sub
Kode untuk menghandle menu mana yang diklik :
1234567891011121314151617
Private Sub mnuTree_DblClick()
If mnuTree.Nodes(mnuTree.SelectedItem.Index).Children = 0 Then 'menu anak
Select Case mnuTree.SelectedItem.Key
Case "mnuBarang": 'TODO : tampilkan frmBarang disini
Case "mnuCustomer"
Case "mnuSupplier"
Case "mnuPembelian"
Case "mnuReturPembelian"
Case "mnuPenjualan"
Case "mnuBiayaOperasional"
Case "mnuGajiKaryawan"
Case "mnuLapPembelian"
Case "mnuLapJthTempo"
Case "mnuLapPenjualan"
End Select
End If
End Sub
Contoh output program :
Source code lengkap bisa didownload disini. Selamat mencoba :)