收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 1689|回复: 8

[asp] csdn 动态加载树(asp+access)

[复制链接]
发表于 2007-1-22 15:51:00 | 显示全部楼层 |阅读模式
数据库有3个字段:
category_id          varchar
category_name    varchar
type                     tinyint
category_id为:1001(根);10011001为第二层,100110011001为第三层树,--------大概有8层!
我再网上找了个代码,修改了一下,基本能实现我的要求,但是在显示树时,当到第5层时就显示不了(6,7,8层都显示了不),郁闷!也没有任何的错误信息.
大家帮我看看,不好意思,要贴代码出来,希望斑竹留情哈!谢谢!
//* index.asp
<!--#include file="conn.asp"-->
<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 rs = Server.CreateObject("ADODB.Recordset")
sql="select *,(select count(*) from category where left(category_id,8) = T.category_id and length(category_id)=12) as children from category T where left(category_id,4)='1001' and length(category_id)=8  order by category_id"
rs.Open sql,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="300" 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
   num=cint(rs("children"))


    If num = 0 Then
     s = "."
     open = "no"
     cls = "dirNode"
    Else
     s = "+"
     open = "false"
     cls = "dirclose"
    End If
   %>
         <tr>
     <td id="node<% = rs("category_id")%>" class="td_node" valign="top"><span class="<% = cls %>" id="dir<% = rs("category_id") %>" onclick="expand(<%=rs("category_id")%>)" open="<% = open %>"><% = s %></span><span class="node" id="s<% = rs("category_id") %>" onclick="expand(<% = rs("category_id") %>)"  title="<% = Trim(rs("category_name")) %>" href="<% = Trim(rs("type")) %>"><% = rs("category_name") %></span>
</td>
   </tr>
   <% If num > 0 Then%>
         <tr id="load_<% = rs("category_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
<!--#include file="conn.asp"-->
<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();
<%
nodeid = Request.QueryString("id")
nodeid_len=len(nodeid)
Set rs = Server.CreateObject("ADODB.Recordset")
sql="select *,(select count(*) from category where left(category_id,"&nodeid_len+4&") = T.category_id and length(category_id)="&nodeid_len+8&") as children from category T where left(category_id,"&nodeid_len&")='" & nodeid & "' and length(category_id)="&nodeid_len+4&" order by category_id"
rs.Open sql,conn,1,3
i=0
Do While Not rs.EOF
%>
ArrNode[<%=i%>] = new NodeClass(<%=rs("category_id")%>,'<%=trim(rs("category_name"))%>','<%=trim(rs("type"))%>',<%=rs("children")%>);
<%

i=i+1
rs.MoveNext
Loop

Set rs = Nothing
%>
parent.ArrToHtml(ArrNode,'<% = nodeid %>');
-->
</script>
<%
Set conn = Nothing
%>
发表于 2007-1-22 18:46:34 | 显示全部楼层
兄弟,那是用AJAX。不是ASP+ACCESS的。
回复 支持 反对

使用道具 举报

发表于 2007-1-22 21:16:42 | 显示全部楼层
Upload上来吧
我也想研究研究目录树!
回复 支持 反对

使用道具 举报

发表于 2007-1-22 22:34:17 | 显示全部楼层
搞不懂为什么要到数据库里加载树的数据。

效率啊。。。。

到xml不好吗? 后台更新的时候,更新一下xml就好了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-23 08:09:04 | 显示全部楼层
谢谢!我这棵树是在后台管理用的,不是在前台.大家再给点思路吧?或者给个好点的demo!谢谢!
回复 支持 反对

使用道具 举报

发表于 2007-1-23 11:33:20 | 显示全部楼层

回复 #4 warran 的帖子

如果树有几十万个结点用XML行吗?
回复 支持 反对

使用道具 举报

发表于 2007-1-23 14:52:13 | 显示全部楼层
LZ上的。你是什么项目啊。有几十万个啊。

宇宙管理系统啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-23 15:44:24 | 显示全部楼层
我的 这个结点会大于1万,所以才要动态读取的,在51.windows 上看到了个xml 的,不过不太好用的!大家有好用点的吗?给几个demo学习学习!谢谢.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-23 16:47:16 | 显示全部楼层
不好意思,继续up!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( ICP05002321 )  

GMT+8, 2019-10-23 15:50 , Processed in 0.093514 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表