2005/10/09 | ASP Tree Example
类别(Techniques) | 评论(1) | 阅读(235) | 发表于 09:08
昨天在做一个 ASP 项目时,需要以树状显示对象及子对象的包含关系。鼓捣了一下,写出一个基本完善的算法。显示效果如下:

wsrwe
cccc
│ ├ aaaa
│ │ └ eeeee
│ ├ dddd
│ └ ddddd
testmember

刚好这是一个典型的树,含一个、两个、三个子节点的节点都存在。

这是一个递归算法,理论上可以输出无限层级的树。当前使用了一个配置属性 conRefererDepth 限制输出层级(取 0 时不限层级)。

<% Dim dict Set dict = Server.CreateObject("Scripting.Dictionary") If Err Then Call Message("CreateObject failed") Call GetReferer(0, lngMembership) Set dict = Nothing Sub GetReferer(level, id) ' Get Referers of the specified membership using recursion. by janlay ' PARAM level : level of current call ' PARAM id : membership id If conRefererDepth > 0 And level >= conRefererDepth Then Exit Sub Dim arr, i, j, str Set rs = conn.Execute("SELECT MembershipID, Name FROM ds_Membership WHERE ReferredMembershipID = "& id &" ORDER BY Name") If rs.Eof Then rs.Close Else arr = rs.GetRows() rs.Close dict.Item(level &"_max") = UBound(arr,2) For i = 0 To UBound(arr,2) dict.Item(level) = i str = Empty For j = 0 To level - 1 str = str & iif(dict(j) < dict(j &"_max"), "│", "&nbsp;") & "&nbsp;" Next str = str & iif(i = UBound(arr,2), "└", "├") Response.Write "<div><font face=""Courier New"">"& str &" </font>"& Server.HTMLEncode(arr(1,i)) &"</div>"& vbCrLf Call GetReferer(level + 1, arr(0,i)) Next End If End Sub其他说明:
1. rs/conn已在外部定义
2. conn 连接已经打开
3. iif 是外部定义的函数,实现和 VB 中的 IIf 相同的功能
4. 首次调用此过程时 level 参数必须是 0
5. 本文作者是 janlay, 未经许可请勿转载
0

评论Comments

日志分类
首页[48]
My Life[13]
Techniques[28]
Misc[3]
5DBlog[4]