`
zendj
  • 浏览: 116767 次
  • 性别: 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);
}
}



分享到:
评论

相关推荐

    软件界面设计工具_3款合集

    在Balsamiq Mockups中绘制界面原型,就像在纸张和白板上手工绘画一样方便快速,而且不用担心出错,因为你完全可以进行回复/重做。在Balsamiq Mockups中设计原型比在纸张和白板可有趣多了! 丰富的控件支持 ...

    快意编程 EXT JS Web开发技术详解.pdf

    第10章 树形组件 186 第11章 窗口组件 204 第12章 工具栏与菜单栏组件 219 第13章 AJAX应用与数据交互 233 第14章 REST介绍 246 第15章 封装Ext JS提高开发速度 262 第三篇 AJAX整合实践 第16章 Ext3+REST+Spring2+ ...

    TreeCtrl、ListCtrl 树形控件VC示例源程序

    内容索引:VC/C++源码,界面编程,树形菜单 TreeCtrl、ListCtrl 树形控件VC示例源程序,用它制作出简洁型的树形控件,类似Windows资源管理器的左侧菜单,树菜单在WEB编程以及Winform编程中都使用频率较高,因此对广大...

    Delphi7 编程 100 实例

    ToolBar工具栏控件的使用 动态建立主菜单选项 窗口界面的动态分隔条...树形视图 自定义系统的About项 修改系统级菜单 实现透明窗体效果 爆破特技窗体 只允许建立一次子窗体的MDI程序 从外部DLL...

    Delphi编程100例

    新颖的资源管理器界面 如何生成半圆形窗口 制作字幕滚动窗体 详解Canvas生成渐变色窗口背景 WINAPM风格磁化窗口 软件封面的图片显示制作 实现图片的任意角度旋转 奇妙的拼图游戏 使用PaintBox控件制作画图程序 使用...

    Delphi7编程100例

    新颖的资源管理器界面 如何生成半圆形窗口 制作字幕滚动窗体 详解Canvas生成渐变色窗口背景 WINAPM风格磁化窗口 软件封面的图片显示制作 实现图片的任意角度旋转 奇妙的拼图游戏 使用PaintBox控件...

    《Delphi7编程100例》代码

    《Delphi7编程100例》代码目录:---------------------------------------------ToolBar工具栏控件的使用动态建立主菜单选项窗口界面的动态分隔条动态设置选项卡页面在标题栏中自定义按钮窗体开合窗帘效果Windows XP...

    DTcms_50_sql_src最新旗舰版带手机和微信公众号设置

    5.0界面不仅对CSS和图标进行调整,对控件、树形目录等也做了对应的增改。 5、无惧挑战 无论电脑或移动设备 无论身处何处 拿起你的设备 随时随地办公 6、简约 多样化界面依然采用简约的风格样式,没有过多的喧哗 在...

    javapms门户网站源码

    系统管理是对网站系统进行全局管理和配置的地方,属于高级管理功能,包含模板管理、资源管理、系统设置,如下图所示: 2.7.1. 模板管理 页面模板控制前台页面所展示出来的显示效果,点击“系统管理”左侧功能菜单...

    Jive论坛源码下载

    论坛数据导出,可通过Web管理界面将论坛数据以树形结构导出到XML文件, 方便Web Services等拓展应用。 论坛版主功能,可设定论坛版主独立管理功能。 积分功能。 Jive论坛的开发是很有意思, 一开始的Jive 1.2.4是...

    基于java SSM框架实现企业办公自动化系统项目源码和文档分享

    (2)登录成功后,进入系统首页,在树形菜单中为用户提供了“日常管理”、“考勤管理”、“员工管理”等内容。 (3)如果用户提交的审核内容,没有通过管理员的审核,可以修改,审核通过后不可修改。 Web开发是为...

    基于java SSM框架实现企业办公自动化系统项目源码和文档

    (2)登录成功后,进入系统首页,在树形菜单中为用户提供了“日常管理”、“考勤管理”、“员工管理”等内容。 (3)如果用户提交的审核内容,没有通过管理员的审核,可以修改,审核通过后不可修改。 Web开发是为...

    Jive论坛1.2.4版

    论坛数据导出,可通过Web管理界面将论坛数据以树形结构导出到XML文件, 方便Web Services等拓展应用。 论坛版主功能,可设定论坛版主独立管理功能。 积分功能。 Jive论坛的开发是很有意思, 一开始的Jive ...

    jlive源码

    论坛数据导出,可通过Web管理界面将论坛数据以树形结构导出到XML文件,方便Web Services等拓展应用。 论坛版主功能,可设定论坛版主独立管理功能。 积分功能。 Jive论坛的开发是很有意思,一开始的Jive 1.2.4是开源...

    delphi7编程百例

    目录: ToolBar工具栏控件的使用 动态建立主菜单选项 窗口界面的动态分隔条 动态设置选项卡页面 在标题栏中自定义按钮 窗体开合窗帘效果 Windows XP界面效果 实现OutLook滚动工具栏...

    Visual C++ 程序开发范例宝典光盘源码 (第二版)1/7

     实例074 Windows资源管理器   实例075 利用列表视图控件浏览数据   实例076 利用列表视图控件制作导航界面   实例077 在列表视图中拖动视图项   实例078 具有排序功能的列表视图控件   实例079 ...

    Visual C++ 程序开发范例宝典光盘源码 (第二版) 3/7

     实例074 Windows资源管理器   实例075 利用列表视图控件浏览数据   实例076 利用列表视图控件制作导航界面   实例077 在列表视图中拖动视图项   实例078 具有排序功能的列表视图控件   实例079 ...

    Visual C++ 程序开发范例宝典光盘源码 (第二版) 6/7

     实例074 Windows资源管理器   实例075 利用列表视图控件浏览数据   实例076 利用列表视图控件制作导航界面   实例077 在列表视图中拖动视图项   实例078 具有排序功能的列表视图控件   实例079 ...

    Visual C++ 程序开发范例宝典光盘源码 (第二版) 5/7

     实例074 Windows资源管理器   实例075 利用列表视图控件浏览数据   实例076 利用列表视图控件制作导航界面   实例077 在列表视图中拖动视图项   实例078 具有排序功能的列表视图控件   实例079 ...

Global site tag (gtag.js) - Google Analytics