不用递归的TreeView构建方法(优化方案)

 ID FatherID Title 0101 01 基本建设支出 010109 0101 其它基本建设支出

Private Function BuildENTree(ByVal ds As DataSet)

Dim rs As DataRowCollection

Dim r As DataRow

Dim ID As String

Dim FatherID As String

Dim Title As String

Dim fn As TreeNode

Dim node As TreeNode

rs = ds.Tables(0).Rows

BootNode = New TreeNode

BootNode.Text = "[0] 所有单位"

BootNode.Tag = "0"   '根目录

For Each r In rs

ID = DirectCast(r.Item(0), String).Trim   'CODE

FatherID = DirectCast(r.Item(1), String).Trim 'FATHERCODE

Title = "[" & ID & "] " & DirectCast(r.Item(2), String).Trim 'TITLE

'查找与父节点ID相同的节点

fn = FindNode(FatherID)

If fn Is Nothing Then

'没找到对应ID的节点

Else

node = New TreeNode

With node

.Tag = ID

.Text = Title

End With

End If

Next

BootNode.Expand()

End Function

'在指定的节点下查找ID相符节点

Private Function FindNode(ByVal n As TreeNode, ByVal ID As String) As TreeNode

Dim ns As TreeNodeCollection

Dim node As TreeNode

Dim Flag As Boolean

Dim strText As String

Dim ReturnNode As TreeNode

Flag = False

If n.Tag = ID Then

Return n

Else

'如果路径根本不相同则返回

If (ID.Length < DirectCast(n.Tag, String).Length) OrElse ((n.Tag <> "0") AndAlso (ID.Substring(0, n.Tag.Length) <> n.Tag)) Then

Return Nothing

End If

ns = n.Nodes

For Each node In ns

ReturnNode = FindNode(node, ID)

If ReturnNode Is Nothing Then

'do nothing

Else

Flag = True

Exit For

End If

Next

If Flag = True Then Return ReturnNode

End If

Return Nothing

End Function

Private FastHashTable As Hashtable

Private Function BuildENTree(ByVal ds As DataSet)

Dim rs As DataRowCollection

Dim r As DataRow

Dim ID As String

Dim FatherID As String

Dim Title As String

Dim fn As TreeNode

Dim node As TreeNode

rs = ds.Tables(0).Rows

BootNode = New TreeNode

BootNode.Text = "[0] 所有单位"

BootNode.Tag = "0"   '根目录

For Each r In rs

ID = DirectCast(r.Item(0), String).Trim   'CODE

FatherID = DirectCast(r.Item(1), String).Trim 'FATHERCODE

Title = "[" & ID & "] " & DirectCast(r.Item(2), String).Trim 'TITLE

'查找与父节点ID相同的节点

fn = FindNode(FatherID)

If fn Is Nothing Then

'没找到对应ID的节点

Else

node = New TreeNode

With node

.Tag = ID

.Text = Title

End With

End If

Next

BootNode.Expand()

End Function

'新版的快速查找

Private Function FindNode(ByVal ID As String) As TreeNode

Return FastHashTable.Item(ID)

End Function

FastHashTable = New Hashtable(3000) '数量

• 本文已收录于以下专栏：

递归（Recursion）的两种优化方法

• HEYUJIEBOY
• 2017年08月04日 20:03
• 494

c# treeview 递归生成树

private void InitTree(TreeNodeCollection Nds, string pid, DataTable dt, string id, string name, stri...
• love_rrr
• 2009年10月19日 17:04
• 2261

递归实现treeview应用的方法

#region 绑定TreeView         ///         /// 绑定TreeView（利用TreeNode）         ///         ///TreeN...
• u012162153
• 2014年11月20日 12:01
• 798

递归优化

fact(n)用递归的方式写出来就是： def fact(n): if n==1: return 1 return n * fact(n - 1)递归函数的优点是定义...
• 2015年06月02日 14:47
• 505

Treeview的递归绑定

1using System;  2using System.Collections;  3using System.ComponentModel;  4using System.Data;  5usi...
• wszhoho
• 2007年03月22日 17:36
• 593

.net的TreeView控件绑定数据库表建立树架构

net本身自带的TreeView控件本身可以提供简单快捷的树结构控件，不过需要是在前台界面手动输入静态数据，只能预先设定好值，一一录入。这次使用到的方法是通过在后台代码绑定数据库表，实现动态的数据树显...
• Annn_kk
• 2017年04月17日 14:41
• 371

TreeView数据绑定的方法(可实现无限递归)

• zhanxiangma
• 2010年12月28日 15:05
• 813

数据库sql常见优化方案

• miachen520
• 2016年08月24日 14:54
• 1616

TreeView 递归添加子节点

• baihe_591
• 2008年05月17日 16:27
• 2990