串連資料庫的ASP樹圖產生程式(源碼)

來源:互聯網
上載者:User

<%'*****************************
'******* 串連資料庫的樹圖產生程式 ********
'*****************************
'假設你已建立了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=.;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
%>
<HTML>
<HEAD>
<title>演習分析</title>
<Script LANGUAGE="JavaScript">
/****************************** 產生樹圖資料 *********************************/
function generateTree()
{
//產生樹圖資料
//-----VBScript-----
<%
''顯示單位
SQLUnit0="select ID,Name"&_
" from Units"&_
" where UpID=0"&_
" order by ID"
set rsUnit0=conn.Execute(SQLUnit0)
//根結點foldersTree
Response.Write("foldersTree=folderNode('"&rsUnit0("Name")&"','"&rsUnit0("ID")&"',1)"&chr(10))
Response.Write("Node"&rsUnit0("ID")&"=foldersTree"&chr(10))
call TreeNode(rsUnit0("ID")) //子結點資料

%>
}
/**************************** 產生樹圖數 結束 *******************************/
</Script>

<Script LANGUAGE="JavaScript">
/************************ 相關函數 *********************************/
// 產生一個節點
function folderNode(name,value,flagOpen)
{
var arrayAux

arrayAux = new Array
arrayAux[0] = flagOpen //結點關閉0或開啟1
arrayAux[1] = value //
arrayAux[2] = name //名稱

return arrayAux
}

//在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("<table border=0 cellspacing=0 cellpadding=0>")
doc.write("<tr><td valign = middle nowrap>")

doc.write(leftSide)
/******分層+/-號**************************************/

if (level>0)//不是根節點
{
if (lastNode) //最後的節點
{
if (foldersNode.length > 3)//有孩子
{
if (foldersNode[0])//且開啟
{
doc.write("<A href='javascript:top.openBranch(\"" + foldersNode[2] + "\")'>")
doc.write("<img border=0 src=../../Images/lastnode-.gif width=16 height=22></a>")
}
else
{ //但關閉
doc.write("<A href='javascript:top.openBranch(\"" + foldersNode[2] + "\")'>")
doc.write("<img border=0 src=../../Images/lastnode+.gif width=16 height=22></a>")
}
}
else //沒孩子
doc.write("<img src='../../Images/lastnode.gif' width=16 height=22>")

leftSide = leftSide + "<img src='../../Images/blank.gif' width=16 height=22>"

}
else //非最後節點
{
if (foldersNode.length > 3)//有孩子
{
if (foldersNode[0])//且開啟
{
doc.write("<A href='javascript:top.openBranch(\"" + foldersNode[2] + "\")'>")
doc.write("<img border=0 src=../../Images/Node-.gif width=16 height=22></a>")
}
else
{ //但關閉
doc.write("<A href='javascript:top.openBranch(\"" + foldersNode[2] + "\")'>")
doc.write("<img border=0 src=../../Images/Node+.gif width=16 height=22></a>")
}
}
else //沒孩子
doc.write("<img src='../../Images/node.gif' width=16 height=22>")

leftSide = leftSide + "<img src='../../Images/vertline.gif' width=16 height=22>"
}

/******手形圖示與超連結**********/
doc.write("<a href='"+FileName+"?ID="+foldersNode[1]+"&Name="+foldersNode[2]+"' target=folderFrame><img src=../../Images/closedfolder.gif width=24 height=22 border=noborder></a>")
/********名稱與超連結********/
doc.write("<td valign=middle align=left nowrap>")
doc.write("<a href='"+FileName+"?ID="+foldersNode[1]+"&Name="+foldersNode[2]+"' target=folderFrame><font size=2 face='宋體'>"+foldersNode[2]+"</font></a>")
//以上超連結提供了ID,Name的QueryString值……………………………………
}
else//根節點
{
/******手形圖示與超連結**********/
doc.write("<a href='"+FileName+"?ID="+foldersNode[1]+"&Name="+foldersNode[2]+"' target=folderFrame><img src=../../Images/closedfolder.gif width=24 height=22 border=noborder></a>")
/********名稱與超連結********/
doc.write("<td valign=middle align=left nowrap>")
doc.write("<a href='"+FileName+"?ID="+foldersNode[1]+"&Name="+foldersNode[2]+"' target=folderFrame><font size=2 face='宋體'>"+foldersNode[2]+"</font></a>")
}

doc.write("</table>")
///////////////////////////////////////////////////////
if (foldersNode.length > 3 && foldersNode[0]) //有孩子且開啟則遞迴顯示節點
{
level=level+1
for (i=3; i<foldersNode.length;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("<body link='#0000ff' vlink='#0000ff' alink='##ff0000' bgcolor='white'>")
redrawNode(foldersTree, doc, 0, 1, "")
doc.close()

doc.body.scrollLeft = posX
doc.body.scrollTop = posY
}

//網頁載入時響應的函數
function initializeTree()
{
generateTree()
redrawTree()
}
/*********************** 相關函數 END *************************/
</Script>
</HEAD>

<FRAMESET cols="220,*" onLoad="initializeTree()" framespacing="1">
<FRAME src="Pleft.htm" name="treeFrame" target="_self" scrolling="auto">
<FRAME SRC="PRight.htm" name="folderFrame" scrolling="auto">
</FRAMESET>

</HTML>
<%
'以上程式在WIN2000Server+IIS5.0+SQLServer2000下測試通過。
'=========================================================
'======= 作者:夏春濤 E-Mail:Bluesky_521@yeah.net ======
'=========================================================
%>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.