树形结构是描述层次数据的常见方法本文介绍的树形结构生成程序主要由一个ASP页面二个&avascript函数构成该树
形结构是异步的也就是说节点数据仅在必要时才读取而不是一次性全部发送到客户端
一概述
树形结构中所有的节点都必须包含以下属性本身的ID父节点的ID以及本节点的说明(节点文本)本文用到了一个
Access数据库Treemdb来保存这些节点信息Treemdb包含表tblTree其定义如下
字段名称 类型 说明
ElementID 自动编号 节点的唯一标识
ParentElementID 数字 父节点的ID
ElementText 文本 节点文本
本程序利用Treedsn文件定义Treemdb数据源Treedsn内容可以用控制面板中的ODBC数据源配置程序得到内容如下
[ODBC]
DRIVER=Microsoft Access Driver (*mdb)
UID=admin
UserCommitSync=Yes
Threads=
SafeTransactions=
PageTimeout=
MaxScanRows=
MaxBufferSize=
ImplicitCommitSync=Yes
FIL=MS Access
DriverId=
DefaultDir=d:Inetpubwwwroot
DBQ=d:InetpubwwwrootTreemdb
注意运行本文程序时应当修改Treedsn中的DefaultDir和DBQ使其指向正确的目录和文件
客户端功能分两部分实现其一是一个普通的浏览器窗口其二为一个IFRAMEIFRAME是不可见的它的作用是负责浏览器
窗口与服务器之间的通信下面是示例程序的一个运行界面
【图】
树形结构各个节点之间的关系可以用< DIV >标记表示如下
【图】
在这里文档的< BODY >是第一层节点(divTree)的容器第一层总共包含四个节点这四个节点又分别是其子节点组的
容器例如上图中divTree包含了divdivdiv和div(它们分别对应一个节点)而div又是divTree的容器
divTree包含了div——divdiv又是divTree的容器而divTree包含了div……
鼠标单击事件由各个节点本身(divdiv……)响应而不是由容器响应节点响应鼠标单击事件后将禁止事件进一步
向上(向父节点)传递这部分功能在GetTree函数内实现请参见该函数代码以了解具体实现方法
整个树形结构的作用过程可用下图表示
【图】
二服务器端代码
客户端脚本向服务器发送的请求包含了一个节点标识服务器脚本GetTreeDataasp查找数据库获得该节点的所有子字节点
并将这些子节点返回给客户程序GetTreeDataasp代码如下:
< % Dim rstTree
Dim strSQL
Dim strData
If RequestQueryString(Level) = Then
ResponseEnd
End If
strSQL = SELECT * FROM tblTree WHERE ParentElementId =
strSQL = strSQL & RequestQueryString(Level) & ORDER BY ElementID
Set rstTree = ServerCreateObject(ADODBRecordset)
rstTreeOpen strSQLFileDSN=d:inetpubwwwroot reedsn
strData =
Do While Not rstTreeEOF
strData = strData & rstTree(ElementId) & | & rstTree(ParentElementId) & | &
rstTree(ElementText) & |
rstTreeMoveNext
Loop
rstTreeClose % >
< HTML >
< BODY OnLoad=parentPopulateTree('< %=strData% >'); >< /BODY >
< /HTML >
注意在实际使用中应相应地更改DSN文件所在路径这段代码并不复杂但请注意以下两点第一客户请求的格式应该为
GetTreeDataasp?Level=节点ID第二返回客户端的节点列表格式为节点标识|父节点标识|节点文本|……