`
zendj
  • 浏览: 121953 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

在Web界面下如何生成像资源管理器一样的树形目录

阅读更多

在Web界面下如何生成像资源管理器一样的树形目录

关键字 数形目录 XML ASP Web Javascript


树形目录显示程序
问题描述:
在我们项目中常常会出现自关联的数据表,如果我们从整体看去,整个表就呈现为一个树形数据结构(对于复杂的情况,它可能变成一个图)。当我们对这个表进行显示,编辑时,如果不采用好的表现形式,会显得很笨拙,为此,我们开发这样的树形结构的程序。在上一版本中,我们使用的是递归算法来实现,在我们对这个算法评测时发现,对于拥有成千上万条记录的数据库就不再能胜任了,所以在新的算法版本中,我们使用了XML技术,动态的发现数据,以解决一次从服务器下在大量数据的尴尬,同时也遍免了如果表数据结构呈现为图时就会进入死循环的错误。

实际思路:
1、 初始显示时只显示根与二级节点,根与二级节点同在一层次
2、 点击一节点,如果它的子节点区域对象不存在,则建立对象,同时下载数据更新数据,显示所有子节点。
3、 每个节点在建立后都就有相同的功能,如检查子节点是否存在,显示隐藏子节点等等
4、 DHTML+XML+ASP+CSS同时使用
技术难点:
1、 使用xmlhttp接口时乱码问题:
因为在asp输出页面中,缺省的编码方案并不是中文的,那么在客户端页面的xmlhttp中解释时,就会以缺省的方案解析,所以就会出现乱码。为此,我们在Server端的asp页面中,加入如下代码定义编码方案:
Response.CharSet="GB2312"
Response.ContentType="text/html"

2、 如何在界面上保持上一版本的风格(类资源管理器形式):
在上一版本中,所有的页面内容都是一气呵成的,在控制上采用递归等思想,所有时的界面相对友好,当时本版中的机制发生了变化,内容是有多次合成的
关键问题,img ,span 对象的id 如何确定
经过求证,在界面上,本版本的界面难以与第一界面相同,所以只能保留一部分,但是总体来说,新界面同样也能满足需要

因为在这里不好使用附件,所以只能贴源码了:

---xtree.html-------------------------------------------------------------------

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<SCRIPT LANGUAGE=javascript src="xtree.js">
</SCRIPT>
<style type="text/css">
<!--
a:link { font-size: 14px; text-decoration: none; color: #0000FF}
a:visited { font-size: 14px; color: #0000FF; text-decoration: none}
a:hover { font-size: 14px; color: #FF0000; background-color: #CCCC99; text-decoration: none}
a:active { font-size: 14px; color: #FFFFFF; background-color: #191970; text-decoration: none}
.item{ font-size:14px}
-->
</style>
</HEAD>
<BODY leftMargin=0 rightMargin=0 topMargin=0 border=0>
<bold>树形菜单演示程序</bold><br>
<table border=0>
<tr><td nowrap>
<span id='oSpanroot' border=0></span><SCRIPT LANGUAGE=javascript>createChildNode("root",0);</SCRIPT></td></tr>
</table>
</BODY>
</HTML>


-------xtree.asp---------------------------------------------------------------

<%@ Language=VBScript %>
<%
Response.CharSet="GB2312"
Response.ContentType="text/html"
''''''''''''''''Server code start''''''''''''''''
dim parId,nodeLayer
parid=Request.QueryString("parId")
nodeLayer=cint(Request.QueryString("nodeLayer"))

if(parid="") then
Response.Write("root id can't is null")
Response.End()
end if
if(nodeLayer<0) then
nodeLayer=0

end if
%>
<%
strconn="at"
strsql="select * from tree where par='"&parid&"'"
'SQL 语句书写要求:在记录集的前面三个字段必须依次为:row_id(惟一的主键)、name(菜单条显示的内容)、par_id(父节点row_id),其它根据需要输出与显示
set conn=server.createobject("ADODB.connection")
conn.open strconn

set rs=server.createobject("ADODB.Recordset")
rs.open strsql,conn,3,3
i=0
dim row_id
row_id=""
while not rs.EOF
row_id=rs.Fields("row_id").Value
name=rs.Fields("name").Value
j=0

while j<nodeLayer
Response.Write("<img src='blank.bmp'>")
j=j+1
wend
Response.Write("<img id='objNode"&row_id&"' style='cursor:hand' src='open.bmp' onclick=javascript:createChildNode('"&row_id&"',"&nodeLayer+1&") border=0 align='absmiddle'>")
Response.Write("<img src='blank.bmp' border=0 align='absmiddle'>")
Response.Write("<a class=item href='view.aspid="&row_id&"' target='mainFrame'>"&Trim(name)&"</a></br>") '项目内容
Response.Write("<span id='oSpan"&row_id&"' ></span>") '子节点内容区域
i=i+1
rs.MoveNext
wend
'''''''''''''''''''''Server Code END '''''''''''''''''
%>

---------xtree.js-----------------------------------------------------------------------------

function getChildTree(parId,nodeLayer)
//parId:=夫节点id,nodeLayer:=子节点所属层次
{
var xmlhttp = new ActiveXObject ("Microsoft.XMLHTTP");
xmlhttp.Open("get", "xtree.aspparId="+parId+"&nodeLayer="+nodeLayer, false);
xmlhttp.Send("Author:taojianbo;Version:2.0");
return xmlhttp.responseText;
}

function showHide(objid)
//显示,隐藏区域,达到菜单显示的目的
//objid:=区域对象ID的parid部分
{
var temp;
eval("temp=oSpan"+objid+".style.display");
if(temp=="block")
{
eval("oSpan"+objid+".style.display='none'");
eval("objNode"+objid+".src='open.bmp'");
}
else
{
eval("oSpan"+objid+".style.display='block'");
eval("objNode"+objid+".src='close.bmp'");
}
}//end function

function createChildNode(childNodeId,nodeLayer)
//如果子节点内容为空,则初始化,并更新数据
//childNodeId:=子节点对象Id的parid部分
{
var temp;
eval("temp=oSpan"+childNodeId+".innerHTML");
if(temp=="")
{
eval("oSpan"+childNodeId+".innerHTML='<div align=right>LOADING...</div><br>'");
temp=new String(getChildTree(childNodeId,nodeLayer));
if(temp.length!=0)
{
eval("oSpan"+childNodeId+".innerHTML=temp");
eval("objNode"+childNodeId+".src='close.bmp'");//变为减号
}
else
{//如果temp内容为空,说明未找到子树,则该节点为叶节点,更改相关属性
eval("objNode"+childNodeId+".src='leaf.bmp'");//更改图标
eval("objNode"+childNodeId+".onclick='"); //取消click事件
eval("oSpan"+childNodeId+".innerHTML=temp");//内容为空
}
}
else
{ showHide(childNodeId);
}
}



分享到:
评论

相关推荐

    jquery资源管理器树形菜单.rar

    本资源“jquery资源管理器树形菜单.rar”是一个利用jQuery实现的树形菜单,常用于构建类似文件资源管理器的界面,为用户提供直观的导航体验。在Web开发中,这样的菜单导航系统是必不可少的,特别是在需要展示层次...

    权限管理系统 树形控件

    在权限管理系统中,树形控件常用于展现资源的层级结构,例如目录结构、部门组织结构或功能模块结构。每个节点代表一个资源或子系统,通过展开和折叠操作,用户可以查看不同级别的权限分配情况。 1. **层级结构的...

    JSP树形菜单(WEBtree)

    在Web开发中,树形菜单是一种常见的界面元素,用于组织和展示层次化的数据。JSP(JavaServer Pages)作为一种动态网页技术,结合Java代码,能够轻松实现这样的功能。本篇将详细介绍一个基于JAVA的WEB树状菜单——...

    C# 做的一个 类似资源管理器

    标题中的"C# 做的一个 类似资源管理器"指的是使用C#编程语言开发的一款应用程序,该程序功能类似于操作系统中的资源管理器,如Windows的文件资源管理器。资源管理器通常用于浏览、组织和管理计算机上的文件和文件夹...

    JavaScript实现的Windows资源管理器

    用户在界面中选择或输入路径后,应用会递归遍历指定目录下的所有文件和子目录,将结果以树形结构展示出来。 运行文件的功能需要考虑不同类型的文件如何处理。对于可执行文件,可以利用浏览器的沙箱环境执行特定的...

    后台管理系统模板++树形

    本资源提供的“后台管理系统模板++树形”是一个专为开发者设计的框架,旨在加速开发过程,通过预设的结构和组件,帮助你快速搭建具有树形模型的后台管理界面。 树形模型在后台管理系统中扮演着至关重要的角色,尤其...

    常用树形控件

    1. Windows API:Windows应用程序开发中,可以使用`CTreeCtrl`类(MFC)或`HTREEITEM`(WinAPI)来创建和管理树形控件。 2. .NET Framework:在C#或VB.NET中,可以使用`TreeView`控件,通过添加`TreeNode`对象构建树...

    操作系统 任务资源管理器 C#

    同时,为了实现类似资源管理器的树形视图,可以使用TreeView控件展示文件系统的层级结构。 在设计文件管理操作时,还需要考虑权限控制和错误处理。比如,当用户试图删除一个被其他进程占用的文件时,应该给出相应的...

    基于layui实现树形穿梭框

    "基于layui实现树形穿梭框"是layui框架中的一个组件,用于构建交互式的树状结构选择器,常用于权限管理、数据分类选择等场景。下面将详细介绍这个知识点。 1. layui框架基础: layui是一个轻量级的前端框架,包含...

    简单的资源管理器

    在IT领域,资源管理器是操作系统中的一个核心组件,它允许用户查看、组织和操作计算机上的文件和文件夹。在Windows系统中,我们常见的资源管理器就是“我的电脑”或“此电脑”。本文将深入探讨如何使用C#编程语言...

    仿资源管理器

    在Windows系统中,资源管理器是用户与文件系统交互的主要界面,用于浏览、打开、移动、复制和删除文件及目录。通过创建一个仿资源管理器,开发者可以为用户提供一个熟悉的界面和操作方式,方便他们管理和操作计算机...

    C# D3.js 树形文件夹管理器

    在树形文件夹管理器中,D3.js可以利用其数据绑定特性,动态生成并更新树状结构。`d3.hierarchy`函数可以用来构建树结构,而`d3.tree`或`d3.cluster`则可以帮助布局和绘制树图。用户可以通过点击节点来展开或折叠...

    Ext界面的web版数据库管理工具

    它提供了一系列可重用的组件,如表格、树形视图、表单、菜单等,用于构建复杂的用户界面。ExtJS库以其强大的UI组件、数据绑定机制和可扩展性而闻名,使得开发人员可以轻松地构建交互式和响应式的Web应用。 2. **...

    类似windows资源管理器

    3. **树形视图和列表视图**: 在资源管理器中,文件和文件夹通常以树形结构显示。在C#中,可以使用WPF的`TreeView`控件来实现这个功能,`ListView`控件用于展示文件列表。 4. **数据绑定**: C#中的数据绑定机制可以...

    模拟Windows 资源管理器 第二版

    在设计上,它遵循了Windows资源管理器的左右两栏布局,左栏呈现目录树,右栏展示选定目录下的文件和子目录。同时,该应用还支持在ListView中直接打开文件,通过调用系统默认的文件处理程序,确保了与原生资源管理器...

    人力资源管理系统JAVA

    《JAVA技术在人力资源管理系统中的应用解析》 在信息化飞速发展的今天,企业对人力资源管理的需求日益增长,而基于JAVA技术开发的人力资源管理系统(HRM System)正扮演着至关重要的角色。本文将深入探讨JAVA技术...

    C#仿windows资源管理器

    在本项目中,"C#仿windows资源管理器"是一个基于C#编程语言开发的应用程序,旨在模拟Windows操作系统中的资源管理器功能。这个项目对于初学者来说是一个很好的学习实例,因为它涵盖了C#基础、文件系统操作以及用户...

    C#资源管理器源代码

    在本文中,我们将深入探讨"C#资源管理器"这一主题,这是基于C#编程语言实现的一个应用程序,旨在模仿操作系统中的文件资源管理器功能。通过学习和理解这段源代码,开发者可以提升对C#编程、文件系统操作以及用户界面...

    js管理类树形菜单

    在Web开发中,树形菜单是一种常见的UI元素,用于展示层次结构的数据,比如文件系统、组织架构或导航菜单。在本主题中,我们将深入探讨如何使用JavaScript来创建和管理类树形菜单。 1. 数据结构:树形菜单的基础是...

    zTree树形菜单代码.7z

    zTree是一个基于jQuery的开源项目,它提供了一种简单的方式来创建和管理树形结构的数据。通过zTree,你可以轻松地在网页上展示层次化的信息,如组织结构、目录、分类等。它的主要特点包括: 1. **灵活性**:zTree...

Global site tag (gtag.js) - Google Analytics