Braincode
11th November 2011, 01:08 PM
Gini gan, gue kan lg membuat program yang kebetulan membutuhkan treeview untuk pengelompokan kategorinya.
Saat ini sih sudah selesai dikerjakan prosedur cetak treeviewnya.
Namun gue rasa ada yg 'salah' (baca: tidak efisien?) dalam genarate nodes ini.
Setiap kali prosedur ini dipanggil, membutuhkan waktu yg cukup lama mnrt gue sendiri (dari 47 data categori, membutuhkan waktu kurang lebih 3-4detik untuk genarate nodesnya)
spesifikasi program: vs2005 + access
Spoiler for Struktur tabel:
Nama tabel = Master_Category
Jumlah field = 2
Field I = Category
*berupa primary key, berisikan nama-nama kategori yg ada
Field II = Category_Location
*berisikan "parent" dari kategori tersebut
contoh:
computer # root
harddisk # computer
SATA # harddisk
IDE # harddisk
dst...
*genaratenodes ini adalah function utamanya, jadi tinggal memanggil function ini untuk menghasilkan treeview yg sudah berisikan data semua kategori
pseudocode: kosongkan treeview, cari dan cetak semua category yg mrpkn root berdasar DB, cari semua subcategory-nya
Code:
Private Sub GenarateNodes()
TreeView_Category.Nodes.Clear()
ExeQuery("Select Category as 'Category', Category_Location From MASTER_CATEGORY Where Category_Location = '- ROOT LEVEL -' Order by Category")
SetTable("MASTER_CATEGORY")
DataGridViewX_ChildNodes.DataSource = DataSet.Tables("MASTER_CATEGORY")
If TableRowsCount("MASTER_CATEGORY") 0 Then
Dim RootCount As Integer = TableRowsCount("MASTER_CATEGORY")
For i As Integer = 0 To RootCount - 1
Dim NewNode As TreeNode
NewNode = TreeView_Category.Nodes.Add(DataGridViewX_ChildNod es.Rows(i).Cells(0).Value)
NewNode.Name = DataGridViewX_ChildNodes.Rows(i).Cells(0).Value
NewNode.ForeColor = Color.Blue
Next
End If
'untuk setiap root category, cari subcategorynya
Dim n As TreeNode
For Each n In TreeView_Category.Nodes
CreateNodes(n)
Next
End Sub
pseudocode: untuk setiap category, cari dan cetak subcategorynya, jika masih punya subcategory maka telusuri terus sampai akhir
Code:
Private Sub CreateNodes(ByVal n As TreeNode)
ExeQuery("Select Category as 'Category', Category_Location From MASTER_CATEGORY Where Category_Location = '" & n.Name & "' Order by Category")
SetTable("MASTER_CATEGORY")
DataGridViewX_ChildNodes.DataSource = DataSet.Tables("MASTER_CATEGORY")
If TableRowsCount("MASTER_CATEGORY") 0 Then
For i As Integer = 0 To TableRowsCount("MASTER_CATEGORY") - 1
Dim NewNode As TreeNode
NewNode = n.Nodes.Add(DataGridViewX_ChildNodes.Rows(i).Cells (0).Value)
NewNode.Name = DataGridViewX_ChildNodes.Rows(i).Cells(0).Value
NewNode.ForeColor = Color.Blue
Next
End If
'untuk recursivenya (telusuri sampai leaf)
Dim aNode As TreeNode
For Each aNode In n.Nodes
CreateNodes(aNode)
Next
End Sub
Kira-kira bagian mana yg 'salah' dan bisa diefisienkan?
thanks gan :kiss:
</div>
Saat ini sih sudah selesai dikerjakan prosedur cetak treeviewnya.
Namun gue rasa ada yg 'salah' (baca: tidak efisien?) dalam genarate nodes ini.
Setiap kali prosedur ini dipanggil, membutuhkan waktu yg cukup lama mnrt gue sendiri (dari 47 data categori, membutuhkan waktu kurang lebih 3-4detik untuk genarate nodesnya)
spesifikasi program: vs2005 + access
Spoiler for Struktur tabel:
Nama tabel = Master_Category
Jumlah field = 2
Field I = Category
*berupa primary key, berisikan nama-nama kategori yg ada
Field II = Category_Location
*berisikan "parent" dari kategori tersebut
contoh:
computer # root
harddisk # computer
SATA # harddisk
IDE # harddisk
dst...
*genaratenodes ini adalah function utamanya, jadi tinggal memanggil function ini untuk menghasilkan treeview yg sudah berisikan data semua kategori
pseudocode: kosongkan treeview, cari dan cetak semua category yg mrpkn root berdasar DB, cari semua subcategory-nya
Code:
Private Sub GenarateNodes()
TreeView_Category.Nodes.Clear()
ExeQuery("Select Category as 'Category', Category_Location From MASTER_CATEGORY Where Category_Location = '- ROOT LEVEL -' Order by Category")
SetTable("MASTER_CATEGORY")
DataGridViewX_ChildNodes.DataSource = DataSet.Tables("MASTER_CATEGORY")
If TableRowsCount("MASTER_CATEGORY") 0 Then
Dim RootCount As Integer = TableRowsCount("MASTER_CATEGORY")
For i As Integer = 0 To RootCount - 1
Dim NewNode As TreeNode
NewNode = TreeView_Category.Nodes.Add(DataGridViewX_ChildNod es.Rows(i).Cells(0).Value)
NewNode.Name = DataGridViewX_ChildNodes.Rows(i).Cells(0).Value
NewNode.ForeColor = Color.Blue
Next
End If
'untuk setiap root category, cari subcategorynya
Dim n As TreeNode
For Each n In TreeView_Category.Nodes
CreateNodes(n)
Next
End Sub
pseudocode: untuk setiap category, cari dan cetak subcategorynya, jika masih punya subcategory maka telusuri terus sampai akhir
Code:
Private Sub CreateNodes(ByVal n As TreeNode)
ExeQuery("Select Category as 'Category', Category_Location From MASTER_CATEGORY Where Category_Location = '" & n.Name & "' Order by Category")
SetTable("MASTER_CATEGORY")
DataGridViewX_ChildNodes.DataSource = DataSet.Tables("MASTER_CATEGORY")
If TableRowsCount("MASTER_CATEGORY") 0 Then
For i As Integer = 0 To TableRowsCount("MASTER_CATEGORY") - 1
Dim NewNode As TreeNode
NewNode = n.Nodes.Add(DataGridViewX_ChildNodes.Rows(i).Cells (0).Value)
NewNode.Name = DataGridViewX_ChildNodes.Rows(i).Cells(0).Value
NewNode.ForeColor = Color.Blue
Next
End If
'untuk recursivenya (telusuri sampai leaf)
Dim aNode As TreeNode
For Each aNode In n.Nodes
CreateNodes(aNode)
Next
End Sub
Kira-kira bagian mana yg 'salah' dan bisa diefisienkan?
thanks gan :kiss:
</div>