连接数据库的ASP树图生成程序(源码) (转)

连接数据库的ASP树图生成程序(源码) (转)[@more@]

  '*******  连接数据库的树图生成程序  ********
  '*****************************
  '假设你已建立了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)//不是根节点
 {
 if (lastNode) //最后的节点
 {
  if (foldersNode.length > 3)//有孩子
  {
  if (foldersNode[0])//且打开
  {
  doc.write("")
  doc.write("lastnode-.gif")
  }
  else
  {  //但关闭
  doc.write("")
  doc.write("lastnode+.gif")
  }
  }
  else  //没孩子
  doc.write("lastnode.gif")
 
  leftSide = leftSide + "blank.gif"
 
 }
 else  //非最后节点
 {
 if (foldersNode.length > 3)//有孩子
  {
  if (foldersNode[0])//且打开
  {
  doc.write("")
  doc.write("Node-.gif")
  } 
  else
  {  //但关闭
  doc.write("")
  doc.write("Node+.gif")
  }
  }
  else  //没孩子
  doc.write("node.gif")
 
  leftSide = leftSide + "vertline.gif"
 } 
 
 /******手形图标与超链接**********/
 doc.write("closedfolder.gif")
 /********名称与超链接********/ 
 doc.write("

")
 doc.write(""+foldersNode[2]+"") 
 //以上超链接提供了ID,Name的QueryString值……………………………………
  }
 else//根节点 
  {     
 /******手形图标与超链接**********/
 doc.write("closedfolder.gif")
 /********名称与超链接********/ 
 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的小图;
这些图片可以通过在资源管理器中抓图获得。
--&gt


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992054/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-992054/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值