'******* 连接数据库的树图生成程序 ********
'*****************************
'假设你已建立了sqlServer数据库UnitTree,并在该库中建立了表:
'Units(ID 单位序号整数唯一,Name 单位名称字符串,UpID 上级单位序号整数)
'注:UpID=0表示该单位是根结点单位;
'输入一些数据如:(1,AA,0)(2,AABB,1)(3,AACC,1)(4,AABB11,2)
'以便进行下面的程序测试。
%>
set conn=server.createobject("adodb.connection")
conn.open "provider=sqloledb;data source=YourSrcName;user id=sa;password=;database=UnitTree"
%>
Sub TreeNode(Code)
SQLUnit="select ID,Name"&_
" from Units"&_
" where UpID="&Code&""&_
" order by ID"
set rsUnit=conn.Execute(SQLUnit)
Do while not rsUnit.Eof
Response.Write("Node"&rsUnit("ID")&"=appendChild("&"Node"&Code&",folderNode('"&rsUnit("Name")&"','"&rsUnit("ID")&"',0))"&chr(10))
call TreeNode(rsUnit("ID"))
rsUnit.movenext
Loop
End Sub
%>
演习分析
//在arrayAux[3]..[n]中添加其孩子
function appendChild(parent, child)
{
parent[parent.length] = child
return child
}
//画结点
//参数 foldersNode:结点
// doc :document对象
// level :结点的层次
// lastNode :是否最末尾的结点
// leftSide :图片
function redrawNode(foldersNode, doc, level, lastNode, leftSide)
{
FileName="Content.ASP" //设置超链接文件,可根据你的情况改写……………
var j=0
var i=0
doc.write("
") doc.write(leftSide) if (level>0)//不是根节点 | ") doc.write(""+foldersNode[2]+"") //以上超链接提供了ID,Name的QueryString值…………………………………… } else//根节点 { /******手形图标与超链接**********/ doc.write("") /********名称与超链接********/ doc.write(" | ") doc.write(""+foldersNode[2]+"") } doc.write(" |
///
if (foldersNode.length > 3 && foldersNode[0]) //有孩子且打开则递归显示节点
{
level=level+1
for (i=3; i if (i==foldersNode.length-1)
redrawNode(foldersNode[i], doc, level, 1, leftSide)
else
redrawNode(foldersNode[i], doc, level, 0, leftSide)
}
}
//当用户点击分层的+/-号时响应,被openBranch调用
function clickOnFolderRec(foldersNode, folderName)
{
var i=0
if (foldersNode[2] == folderName)
{
if (foldersNode[0])//若为打开状态时,则将其关闭
foldersNode[0] = 0
else
foldersNode[0] = 1
}
else
{
for (i=3; i< foldersNode.length; i++)
clickOnFolderRec(foldersNode[i], folderName)
}
}
//打开或关闭结点(当用户点击分层的+/-号时响应)
function openBranch(branchName)
{
clickOnFolderRec(foldersTree, branchName)
timeOutId = setTimeout("redrawTree()",100)
}
//显示树图
function redrawTree()
{
var doc = top.treeFrame.window.document
//记录当前滚动条位置
posX = doc.body.scrollLeft
posY = doc.body.scrollTop
doc.open()
doc.write("
redrawNode(foldersTree, doc, 0, 1, "")
doc.close()
doc.body.scrollLeft = posX
doc.body.scrollTop = posY
}
//网页载入时响应的函数
function initializeTree()
{
generateTree()
redrawTree()
}
/*********************** 相关函数 END *************************/
'以上程序在 win2000Server+IIS5.0+SQLServer2000下测试通过。
'=========================================================
'======= 作者:夏春涛 E- Mail: .NET" rel="nofollow">Bluesky_521@yeah.net ======
'=========================================================
%>
<!--
PLeft.htm文件的内容:
正在生成树图,请稍候...
PRight.htm文件的内容:
欢迎访问!
Content.asp文件根据你的需要自己编写。
程序执行的效果,与windows的资源管理器几乎一样。
closedfolder.gif是一个22*22的小图,其余的图片是16*22的小图;
这些图片可以通过在资源管理器中抓图获得。
-->
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992054/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10752043/viewspace-992054/