动态载入树 (ASP+数据库)

转载 2005年04月26日 22:41:00
 

ASP+ACCESS 在数据量达100万条记录下,载入速度仍然惊人....

// 网上转载. 忘了作者...  : )

//**********************  index.asp ************************//

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%Option Explicit%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>tree</title>
<link href="css/style.css" rel="stylesheet" type="text/css">
<script language="JavaScript">
<!--
var d1,d2;

function expand(id)
{
 var d=new Date();
 d1=d.valueOf();

 var s_id = eval("s" + id);
 var dir_id = eval("dir" + id);
 if(s_id.href != '')
 {
  //window.open(s_id.href);
  //or
  //top.frames['FrameName'].location.href = s_id.href;
 }

 switch(dir_id.open)
 {
  //改变"+","-"
  case "true":
  {
   with(dir_id)
   {
    innerText = "+";
    open = "false";
    className = 'dirclose';
   }
   if(document.getElementById("t" + id))
   {
    eval("t"+id).style.display = 'none';
    document.getElementById("load_" + id).style.display = 'none';
    return;
   }
   else
   {
    document.getElementById("load_" + id).style.display = 'none';
   }
   break;
  }
  case "false":
  {
   with(dir_id)
   {
    innerText = "-";
    open = "true";
    className = 'diropen';
   }
   
   document.getElementById("load_" + id).style.display = '';
   
   if(document.getElementById("t" + id))
   {
    eval("t" + id).style.display = '';
    eval("load_" + id).style.display = 'none';
    return;
   }
      else
   {
    document.frames['hifm'].location.replace("subtree.asp?id=" + id);
   }
      break;
  }
  default:dir_id.innerText = "."; dir_id.className = 'dirNode'; return;
 }

}

function ArrToHtml(ArrNode,nodeid)
{
 //输出到页面
 var node_html = '<table id="t' + nodeid + '" width="100%" border="0" style="position: relative; left: 18px;" cellspacing="0" cellpadding="0">';

 var str,opened,cls
 for (var i = 0; i < ArrNode.length; i++)
 {
  if (ArrNode[i].iChildren == 0)
  {
   str = '.';
   opened = 'no';
   cls = 'dirNode';
  }
  else
  {
   str = '+';
   opened = 'false';
   cls = 'dirclose';
  }

  node_html += '<tr><td id="node' + ArrNode[i].id + '" class="td_node" valign="top"><span class="' + cls + '" id="dir' + ArrNode[i].id + '" onclick="expand(' + ArrNode[i].id + ')" open="' + opened + '">' + str + '</span><span class="node" id="s' + ArrNode[i].id + '" onclick="expand(' + ArrNode[i].id + ')" title="' + ArrNode[i].Content + '" href="' + ArrNode[i].strLink + '">' + ArrNode[i].Content + '</span></td></tr>';

  if (ArrNode[i].iChildren > 0)
  {
   node_html += '<tr id="load_' + ArrNode[i].id + '" style="display: none"><td class="td_node"><table border="0" cellspacing="0" cellpadding="0" style="position: relative; left: 18; top: 0px"><tr><td class="td_node"><span class="dirNode">.</span><span class="load">Loading...</span></td></tr></table></td></tr>';
  }
 }

 node_html += '</table>';
 if (document.getElementById("load_" + nodeid))
 {
  document.getElementById("load_" + nodeid).style.display = "none";
  document.getElementById("node" + nodeid).innerHTML += node_html;
  var d=new Date();
  d2=d.valueOf();
  message.innerHTML = "耗时:"+(d2-d1)+"ms";
 }
}
-->
</script>
</head>

<body topmargin="0" leftmargin="0" scroll="yes">
<%
Dim conn,rs
Dim s,open,cls
On Error Resume Next
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("tree/tree.mdb") & ";Persist Security Info=False"
Set rs = Server.CreateObject("ADODB.Recordset")

rs.Open "select *,(select count(*) from deeptree where parentid = T.id) as children from deeptree T where parentid=0 order by parentid",conn,1,3
%>
<div id="message" style="height: 20px" align="center">   </div>
<div align="center">
  <center>
    <table border="0" width="100%" cellspacing="0" cellpadding="0" height="100%" bgcolor="#F2F2F2">
      <tr>
        <td width="260" valign="top" align="left">
          <div id="treedir" style="overflow: auto; width: 30%; height: 100%;">
         <table border="0" cellspacing="0" cellpadding="0" style="position: relative; left: 18px; top: 20px;" width="100%">
   <%
   Do While Not rs.EOF
    If rs("children") = 0 Then
     s = "."
     open = "no"
     cls = "dirNode"
    Else
     s = "+"
     open = "false"
     cls = "dirclose"
    End If
   %>
         <tr>
     <td id="node<% = rs("id")%>" class="td_node" valign="top"><span class="<% = cls %>" id="dir<% = rs("id") %>" onclick="expand(<%=rs("id")%>)" open="<% = open %>"><% = s %></span><span class="node" id="s<% = rs("id") %>" onclick="expand(<% = rs("id") %>)"  title="<% = Trim(rs("content")) %>" href="<% = Trim(rs("link")) %>"><% = rs("content") %></span>
     </td>
   </tr>
   <% If rs("children") > 0 Then%>
         <tr id="load_<% = rs("id") %>" style="display: none">
           <td class="td_node">
             <table border="0" cellspacing="0" cellpadding="0" style="position:relative;left:18;top:0" width="100%">
            <tr>
              <td class="td_node"><span class="dirNode">.</span><span class="load">Loading...</span>
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
   <%End If%>
   <%
    rs.MoveNext
   Loop
   %>
          </table>
        </div>
      </td>
    </table>
  </center>
</div>
<%
Set rs = Nothing
Set conn = Nothing
%>
<iframe id='hifm' width=0 height=0 style="display: none" height="100%" width="100%"></iframe>
</body>
</html>


///****************** subtree.asp *********************//

<%Option Explicit%>
<script language="JavaScript">
function NodeClass(id,Content,strLink,iChildren)
{
 //this.id=parseInt(id);
 this.id=id;
    this.Content=Content;
 this.strLink=strLink;
 this.iChildren=iChildren;
    //this.iChildren=parseInt(iChildren);
}

var ArrNode = new Array();
<%
Dim conn,rs,s,cls,href,Open
Dim nodeid,i
nodeid = Request.QueryString("id")
'On Error Resume Next
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("tree/tree.mdb") & ";Persist Security Info=False"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "select *,(select count(*) from deeptree where parentid = T.id) as children from deeptree T where parentid=" & nodeid & "",conn,1,3
i=0
Do While Not rs.EOF
 %>
 ArrNode[<%=i%>] = new NodeClass(<%=rs("id")%>,'<%=trim(rs("content"))%>','<%=trim(rs("link"))%>',<%=rs("children")%>);
 <%

 i=i+1
 rs.MoveNext
Loop

Set rs = Nothing
%>
parent.ArrToHtml(ArrNode,'<% = nodeid %>');
-->
</script>
<%
Set conn = Nothing
%>

//********************* node.htc *********************//

<PUBLIC:COMPONENT>
<PUBLIC:ATTACH EVENT="onmouseover" ONEVENT="fos()"/>
<PUBLIC:ATTACH EVENT="onmouseout" ONEVENT="blu()"/>
<PUBLIC:ATTACH EVENT="onselectstart" ONEVENT="st()"/>
<SCRIPT>
function fos(){
if(style.backgroundColor!='#ffffff'){
style.color="#000000"
style.border="1 solid #888888"
style.backgroundColor='#DDDDDD'
}
else
{style.color="#000000"
style.border="1 solid #999999"
style.backgroundColor='#ffffff'
}
}

function blu(){
if(style.backgroundColor!='#ffffff'){
style.color="#000000"
style.border="1 solid #f2f2f2"
style.backgroundColor='#f2f2f2'
}
else
{style.color="#000000"
style.border="1 solid #999999"
style.backgroundColor='#ffffff'
}
}

function st(){
return false;
}
</SCRIPT>
</PUBLIC:COMPONENT>

//***************************  style.css ****************//

body{font-size:12px}
#txt{font-size: 12px; color: #000000;  font-family: Courier New;border:1 solid #3366cc}
#hrf{font-size: 12px; color: #000000;  font-family: Courier New;border:1 solid #3366cc}
#sb{font-size: 12px; color: #000000;  font-family: Courier New;background-color:#d2e8ff;border:1 solid #3366cc;cursor:hand}
.node{position:relative;left:2;height:20;padding:3 3 1 3;font-size:12px;font-family: Courier New;cursor:hand;border:1 solid #f2f2f2;behavior:url(css/node.htc)}
.load{position:relative;left:2;height:20;padding:1 3 1 3;font-size:12px;font-family: Courier New;cursor:hand;border:1 solid #999999;background-color:#f2f2f2;color:#999999}
.td_node{height:22px}
#treedir{
}
span.diropen
{ padding-left:2px;
 overflow:hidden;
 line-height:3px;
 font-size:12px;
 padding-top:5px;
 width:11px;
 height:11px;
 border:solid 1px black;
 background-color:#ffffff;
 cursor:hand;
}
span.dirclose
{
 line-height:6px;
 font-size:9px;
 overflow:hidden;
 padding:2px;
 width:11px;
 height:11px;
 border:solid 1px black;
 background-color:#ffffff;
 cursor:hand;
}
.dirNode
{
 font-weight:bold
 overflow:visible;
 font-size:9px;
 line-height:3px;
 padding: 1px 1px 0px 3px;
 width:11px;
 height:11px;
 border:solid 1px black;
 background-color:#ffffff;
 cursor:hand;
}

// 把 node.htc, style.css 保存与 css 目录下. index.asp subtree.asp 放与根目录.
另新建一ACCESS数据库 tree.mdb
表deeptree 结构为 id,content, parentid,link

动态载入树 (ASP+数据库)

 //**********************  index.asp ************************//%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%...
  • mengyao
  • mengyao
  • 2006年08月25日 10:18
  • 1069

动态载入树 (ASP+数据库)

ASP+ACCESS 在数据量达100万条记录下,载入速度仍然惊人....// 网上转载. 忘了作者...  : )//**********************  index.asp ******...
  • hqt
  • hqt
  • 2005年04月18日 13:26
  • 863

动态载入树 (ASP+数据库)

//**********************  index.asp ************************//treevar d1,d2;function expand(id){ var...
  • lazycatw
  • lazycatw
  • 2007年04月10日 11:00
  • 337

一些不常见的ASP调用存储过程的技巧

一些不常见的ASP调用存储过程的技巧1、最简单的如下Dim objConnSet objConn = Server.CreateObject("ADOBD.Connection")objConn.Op...
  • itzhiren
  • itzhiren
  • 2007年04月20日 14:25
  • 522

Asp.net性能优化总结

关于数据处理相关的优化 一、 SqlDataRead和Dataset的选择 Sqldataread优点:读取数据非常快。如果对返回的数据不需做大量处理的情况下,建议使用SqlDataReader,其性...
  • regedit362451dennis
  • regedit362451dennis
  • 2005年08月19日 09:01
  • 754

easyUI的下拉框combobox与树tree联动

参与联动的有 2 个combobox 和 1 个tree: 联动流程:combobox1 控制 combobox2,combobox2 控制 tree1联动代码: //先写被控制者,再写控制...
  • leftfist
  • leftfist
  • 2015年01月15日 09:45
  • 8449

二级联动菜单——ASP+数据库版

var j; j=0; goaler = new Array();
  • haibo0668
  • haibo0668
  • 2016年06月02日 12:47
  • 399

数据库索引、B树、B+树

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结...
  • Marelin
  • Marelin
  • 2014年04月03日 17:10
  • 2239

用ExtJS 实现动态载入树(Load tree)

 用ExtJS  实现动态载入树(Load tree)1、  数据库背景:这里有一个组织机构表,结构如下: Oracle DDL脚本 :create table  ORGANIZATION(  ORG...
  • lizh0912
  • lizh0912
  • 2009年02月24日 22:34
  • 1772

树型数据在关系数据库中的存储方式辨析

本文成文于2014年2月,背景是TiEAF(基础业务平台)设计之初“模型树”的存储方式选型。笔者在文中对关系数据库中常用的树型结构的存储方式进行了描述和辨析。现将其整理发表以供读者参考。...
  • free1985
  • free1985
  • 2017年07月12日 19:37
  • 1901
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 动态载入树 (ASP+数据库)
举报原因:
原因补充:

(最多只允许输入30个字)