`
raymond.chen
  • 浏览: 1441544 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

自创的TreeTable控件

阅读更多

1、功能实现的关键点 
     1)TR元素的id、pid值的命名规则:以TR_开头,将每一层数据集中记录的索引加在前缀的后面,各层索引之间用下划线(_)隔开,比如TR_0_0_3。 
     2)控制数据行显示/隐藏的JavaScript代码。

2、显示数据行的Freemarker模板

<#macro showSub pId trID _level>
    <#-- 如果父ID为空,则取顶层的记录 -->
	<#if pId?has_content>
		<#local subList = serviceHelper.findSubOrganizations(pId) >
	<#else>
		<#assign subList = serviceHelper.findTopOrganizations() >
	</#if>
	
	<#list subList as item>
		<#local subList2 = serviceHelper.findSubOrganizations(item.orgId)>
		<#-- 行编号 -->
		<#if trID?has_content>
			<#local subId = "${trID}_${item_index?string('####')}">
		<#else>
			<#local subId = "${item_index?string('####')}">
		</#if>
		<tr id="TR_${subId}" <#if trID?has_content> pid="TR_${trID}" </#if> class="<#if rowIndex%2 == 0>bg1<#else>bg1</#if>" ondblclick="showDetails('orgView.action?orgId=${item.orgId}')" style="display:<#if _level?number-1 gt expandDepth>none</#if>">
			<td style="text-align:left;text-indent:${(_level?number - 1)*20}pt;">
				<#-- 有下级节点才显示加/减号的图片 -->
				<#if subList2?has_content>
					<#if _level?number gt expandDepth>
						<img src="images/dtree/nolines_plus.gif" id="IMG_${subId}" border="0" onclick="javascript:showHiddenNode(this, 'TR_${subId}')" style="cursor:hand;" align="absmiddle">
					<#else>
						<img src="images/dtree/nolines_minus.gif" id="IMG_${subId}" border="0" onclick="javascript:showHiddenNode(this, 'TR_${subId}')" style="cursor:hand;" align="absmiddle">
					</#if>
				</#if>
				<a href="#" oncontextmenu="showContextMenu('orgContextMenu', '${item.orgId}')">${item.name?if_exists?html}&nbsp;</a></td>
			<td>${item.shortName?if_exists?html}&nbsp;</td>
			<td>${item.contactor?if_exists?html}&nbsp;</td>
			<td>${item.telephone?if_exists?html}&nbsp;</td>
			<td>${item.fax?if_exists?html}&nbsp;</td>
		</tr>
	    <#assign rowIndex = rowIndex + 1>
		<@showSub item.orgId "${subId}" "${_level?number+1}"/>
	</#list>
</#macro>

<#assign rowIndex = 0>
<#assign expandDepth = 1> <#-- 默认展开的层数,层数大于该值时将被隐藏 -->
<table border="0" cellspacing="0" cellpadding="0" class="width100">
  	<tr>
    	<td style="padding-top:0px;">
    		
			<table border="0" cellspacing="0" cellpadding="2" class="list" width="100%">
				<tr class="top" height="25">
			    	<td nowrap>组织名称</td>
			    	<td width="70">简称</td>
			    	<td width="70">联系人</td>
			    	<td width="100">联系电话</td>
			    	<td width="100">传真</td>
			  	</tr>
			  	
			  	<@showSub "" "" "1" />
			</table>

		</td>
  	</tr>
</table>



3、获取数据的DAO方法

public List findSubOrganizations(String parentOrgId) {
    return find("from Organization where parentOrgId='" + parentOrgId + "'");
}

public List findTopOrganizations() {
    return find("from Organization where parentOrgId is null or parentOrgId=''");
}



4、控制数据行显示/隐藏的JavaScript代码

//显示或隐藏树形Table的子节点数据
function showHiddenNode(imgObj,trId){
	var imgSrc = imgObj.src.toLowerCase();
	if(imgSrc.indexOf("nolines_minus.gif") != -1){ //隐藏
		imgObj.src = "images/dtree/nolines_plus.gif";
  		jQuery("tr[id^=" + trId + "_]").css("display", "none");		
	}else{ //显示
		imgObj.src = "images/dtree/nolines_minus.gif";
		
		//显示第一层的子节点
		var trs = jQuery("tr[pid=" + trId + "]");
		trs.css("display", "");
		
		//显示更深层的子节点
		for(var i=0;i<trs.length;i++){
			showHiddenSub(trs[i].id);
		}
	}
}

//递归检查下一级节点是否需要显示
function showHiddenSub(trId){
	var imgObj = document.getElementById("IMG_" + trId.replace("TR_",""));
	if(imgObj == null) return;
	
	var imgSrc = imgObj.src.toLowerCase();
	if(imgSrc.indexOf("nolines_minus.gif") != -1){//下级节点是展开的,则需要显示出来
		var trs = jQuery("tr[pid=" + trId + "]");
		trs.css("display", "");
		
		for(var i=0;i<trs.length;i++){
			showHiddenSub(trs[i].id);
		}
	}
}



5、显示效果如图一所示

6、演示程序
看附件

 

  • 大小: 87.3 KB
分享到:
评论
2 楼 raymond.chen 2008-10-24  
我在IE6、Maxthon上都能正常使用。你用其他电脑的浏览器试试看吧。
1 楼 olivechinese 2008-10-24  
好像只能在Firefox中使用,并且鼠标右键使用不了,我是用 firefox3版本

相关推荐

    JQUERY TreeTable控件

    **jQuery TreeTable控件详解** 在网页开发中,数据的展示方式多种多样,其中树形表格(TreeTable)是一种能够同时展示层次结构和表格数据的高效工具。jQuery TreeTable控件便是实现这一功能的JavaScript库,它使得...

    WPF下的TreeTable实现示例

    除了自定义实现,也可以使用诸如OzCode,Syncfusion等第三方库,它们提供了开箱即用的TreeTable控件,简化了开发过程。 9. **性能优化** 当数据集较大时,为提高性能,可以采用虚拟化技术,只在视口内加载和显示...

    jquery 树表格控件 treetable

    1. 引入依赖:首先,你需要在HTML页面中引入jQuery库和jQuery TreeTable的脚本文件,通常还包括其样式表文件,以确保控件正常运行。 ```html &lt;script src="https://code.jquery.com/jquery.min.js"&gt;&lt;/script&gt; ...

    树状表格TreeGridView自定义控件,源码

    这个控件可能通过继承`System.Windows.Forms.TreeView`和`System.Windows.Forms.DataGridView`,然后利用控件组合和事件处理来创建一个复合控件。开发者可能实现了如节点展开/折叠、数据绑定、数据编辑和自动更新到...

    C# 实例treeTable.zip

    TreeTable控件通常由节点(Nodes)和列(Columns)组成,每个节点可以拥有子节点,形成层次结构,而每层节点又可以显示多列数据。 在"C# 实例treeTable.zip"这个压缩包中,我们可能找到了一个关于如何在C#环境中...

    TreeTableJava实现树形结构表格

    treeTable是跨浏览器、性能很高的jquery的树表组件,它使用非常简单,只需要引用jquery库和一个js文件,接口也很简单。 优点 兼容主流浏览器: 支持IE6和IE6+, Firefox, chrome, Opera, Safari 接口简洁: 在普通...

    treetable

    1. **JTree组件**:这是Java Swing提供的一种用于显示树状数据的控件。每个节点代表一个对象,可以包含子节点。用户可以通过展开、折叠节点来查看或隐藏子节点,方便对层次结构的探索。 2. **JTable组件**:JTable...

    treeTable测试样例

    综上所述,TreeTable测试样例可能是为了演示如何在实际项目中有效利用TreeTable控件,提供了一种参考实现或测试基准。通过对TreeTable的理解和应用,开发者能够创建更直观、易用的用户界面,以更好地管理和展示层次...

    jquery.treeTable.js

    jquery.treeTable.js jquery.treeTable.js jquery.treeTable.js jquery.treeTable.js jquery.treeTable.js jquery.treeTable.js

    常用的html控件,包含自定义控件

    9. TreeTable_eval:这可能是TreeTable的一个评估版本或示例代码,用于演示如何在项目中集成和使用TreeTable控件。 10. jtree:jTree是基于jQuery的树形插件,用于在网页上呈现树状数据结构,支持拖放操作、异步...

    treeTable树形显示

    TreeTable是一种在网页中以树状结构展示数据的表格组件,它将表格和树形视图结合在一起,常用于组织和展示层次结构的数据。在给定的“treeTable(jeesite使用)”压缩包中,我们可以找到一个基于Java Web框架Jeesite...

    TreeTable,用于展开/折叠table的行

    TreeTable是一种特殊的表格控件,它扩展了传统的二维表格功能,允许数据以树形结构进行组织和展示。在计算机用户界面设计中,TreeTable结合了表格(Table)和树视图(TreeView)的优点,为用户提供了一种高效且直观...

    treeTable例子

    TreeTable是一种特殊的表格展示方式,它结合了树形结构和表格数据的优点,使得在Web应用中可以更有效地组织和展示层次关系复杂的数据。在本示例中,我们将会深入探讨TreeTable的基础概念、应用场景以及如何实现一个...

    Layui的树形表格treeTable

    在Layui中,树形表格(treeTable)是一种非常实用的功能,它将传统的表格与树状结构相结合,适用于展示具有层级关系的数据,如部门结构、文件目录等。下面我们将深入探讨Layui的treeTable,以及如何实现无限层级的树...

    LayUI树形表格treetable使用详解

    LayUI树形表格treetable使用详解

    jquery treetable完美实现可全打开全隐藏

    **jQuery TreeTable 知识详解** `jQuery TreeTable` 是一个强大的JavaScript库,它将HTML表格转换为可展开和折叠的树形结构。这个库基于jQuery框架,使得在Web应用中展示层次化数据变得简单易行。在"jquery ...

    jquery-treetable

    《jQuery TreeTable:构建动态树形表格的利器》 在Web开发中,数据展示的方式多种多样,其中树形表格作为一种高效的数据组织形式,被广泛应用于各类管理界面和数据展示场景。今天我们将深入探讨jQuery TreeTable...

    Layui树形表格treetable

    在这些组件中,树形表格(TreeTable)是一个功能强大的工具,尤其适用于展示具有层级关系的数据。在本篇文章中,我们将深入探讨如何在LayUI中实现和使用TreeTable。 首先,LayUI的TreeTable是在基础的数据表格...

    用jQuery的treetable实现的树形table

    下面将详细探讨如何使用jQuery的treetable来实现树形table。 首先,我们需要理解treetable的基本概念。TreeTable是一种结合了表格和树状视图的数据展示方式,它在每个表格行中添加了一个展开/折叠按钮,使得用户...

    jquery的TreeTable插件

    **jQuery TreeTable插件详解** 在网页开发中,数据的展示方式多种多样,其中树形表格(TreeTable)是一种常用且高效的数据呈现形式,尤其适用于层次结构清晰、关系复杂的数据。jQuery TreeTable插件就是用来将普通...

Global site tag (gtag.js) - Google Analytics