i have never used treeviews in past , want display hierarchical structure (recursive relationship of n levels). data (available in dataset - retrieved database query) in following structure:
__id__ | __name__ | __parent__ 1 | patrick | 2 | mark | 3 | scott | 2 4 | jason | 5 | julian | 6 | john | 6 7 | steve | 8 | george | 1 9 | robert | 1 10 | rodney | 8 i'm trying produce following output
- patrick [1] - george [8] - rodney [10] - robert [9] - mark [2] - scott [3] - julian [5] - john [6] - jason [4] - steve [7] i'm trying generate treeview control have no experience treeviews. feedback or examples on how achieve appreciated.
to fill treeview datatable, try following code
dim datatable1 new datatable private sub filltesttable() datatable1.columns.add("id", gettype(integer)) datatable1.columns.add("name", gettype(string)) datatable1.columns.add("parent", gettype(integer)) datatable1.columns.add("level", gettype(integer)) datatable1.rows.add(1, "patrick") datatable1.rows.add(2, "mark") datatable1.rows.add(3, "scott", 2) datatable1.rows.add(4, "jason") datatable1.rows.add(5, "julian") datatable1.rows.add(6, "john", 5) datatable1.rows.add(7, "steve") datatable1.rows.add(8, "george", 1) datatable1.rows.add(9, "robert", 1) datatable1.rows.add(10, "rodney", 8) dim integer = 0 datatable1.rows.count - 1 dim id1 string = datatable1.rows(i).item("id").tostring datatable1.rows(i).item("level") = findlevel(id1, 0) next end sub private function findlevel(byval id string, byref level integer) integer dim integer = 0 datatable1.rows.count - 1 dim id1 string = datatable1.rows(i).item("id").tostring dim parent1 string = datatable1.rows(i).item("parent").tostring if id = id1 if parent1 = "" return level else level += 1 findlevel(parent1, level) end if end if next return level end function code vb.net windowsforms application
private sub createtree() dim maxlevel1 integer = cint(datatable1.compute("max(level)", "")) dim i, j integer = 0 maxlevel1 dim rows1() datarow = datatable1.select("level = " & i) j = 0 rows1.count - 1 dim id1 string = rows1(j).item("id").tostring dim name1 string = rows1(j).item("name").tostring dim parent1 string = rows1(j).item("parent").tostring if parent1 = "" treeview1.nodes.add(id1, name1) else dim treenodes1() treenode = treeview1.nodes.find(parent1, true) if treenodes1.length > 0 treenodes1(0).nodes.add(id1, name1) end if end if next next end sub private sub button1_click(sender system.object, e system.eventargs) handles button1.click filltesttable() createtree() treeview1.expandall() end sub code asp.net application
private sub createtree() dim maxlevel1 integer = cint(datatable1.compute("max(level)", "")) dim i, j integer = 0 maxlevel1 dim rows1() datarow = datatable1.select("level = " & i) j = 0 rows1.count - 1 dim id1 string = rows1(j).item("id").tostring dim name1 string = rows1(j).item("name").tostring dim parent1 string = rows1(j).item("parent").tostring if parent1 = "" treeview1.nodes.add(new treenode(name1, id1)) else dim node1 treenode = getchildbyvalue(parent1, treeview1.nodes) if not node1 nothing node1.childnodes.add(new treenode(name1, id1)) end if end if next next end sub private function getchildbyvalue(byval id1 string, byval nodecollection1 treenodecollection) treenode each treenode1 treenode in nodecollection1 if treenode1.value = id1 return treenode1 else dim treenode2 treenode = getchildbyvalue(id1, treenode1.childnodes) if not treenode2 nothing return treenode2 end if end if next return nothing end function protected sub button1_click(sender object, e eventargs) handles button1.click filltesttable() createtree() treeview1.expandall() end sub
Comments
Post a Comment