好记性不如烂笔头。

treetable 官网:http://ludo.cubicphuse.nl/jquery-treetable/#api

今天要做一个关于table的树节点展示,还有编辑,删除功能,找了一堆的代码,终于完成了。先奉上完成后图片:

webservice中配置:

因为 有查询节点功能,所以sql语句中要保证当查询子节点时可以获取到父节点中的数据:

sql 语句:

  sql.Append("select * from(");

                 sql.Append(@"SELECT
row_number () OVER ( ORDER BY
CAST
(a.SHOWINDEX AS NUMERIC(18, 0)) ASC
) AS rn,
a.LAID,
a.LABEL,
b.LABEL AS parent,
a.BELONINGLABLE,
a.SHOWINDEX
FROM
TB_LABEL a
LEFT JOIN TB_LABEL b ON b.LAID = a.BELONINGLABLE
WHERE
(
a.LABEL LIKE @bqm
OR (
SELECT
COUNT (1)
FROM
TB_LABEL c
WHERE
c.BELONINGLABLE = a.LAID
AND c.LABEL LIKE @bqm
) > 0
)
");
sql.Append(") t where rn between @rn1 and @rn2");

将获取的值(list型)排序排成  父节点在前,其子节点在后的顺序,偏于前台展示:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Web
{
public static class treetable
{ public static List<Web.WebService.index.label> resultNodes = new List<Web.WebService.index.label>();//树形结构排序之后list内容
public static List<Web.WebService.index.label> nodes; //传入list参数 public static List<Web.WebService.index.label> TreeLists(List<Web.WebService.index.label> WYGLTableModelList)
{
resultNodes.Clear(); ///清空 上一次 的 返回数组
nodes = WYGLTableModelList;
for (int i = ; i < nodes.Count; i++)
{
String id = nodes[i].UNITID;
if (nodes[i].UNITNAME == "")
{//通过循环一级节点 就可以通过递归获取二级以下节点
resultNodes.Add(nodes[i]);//添加一级节点
build(nodes[i]);//递归获取二级、三级、。。。节点
}
} return resultNodes;
} /**
* 递归循环子节点
*
* @param node 当前节点
*/
private static void build(Web.WebService.index.label node)
{
List<Web.WebService.index.label> children = getChildren(node);
if (children.Count > )
{//如果存在子节点
foreach (Web.WebService.index.label child in children)
{//将子节点遍历加入返回值中
resultNodes.Add(child);
build(child);
}
}
}
/**
* @param node
* @return 返回
*/
private static List<Web.WebService.index.label> getChildren(Web.WebService.index.label node)
{
List<Web.WebService.index.label> children = new List<Web.WebService.index.label>();
String id = node.UNITID;
foreach (Web.WebService.index.label child in nodes)
{
if (id == (child.UNITNAME))
{//如果id等于父id
children.Add(child);//将该节点加入循环列表中
}
}
return children;
} }
}

将组织好的数据发送到前端js 进行处理:

 $.ajax({

            url: WebService + "/Query_biaoqian_data",
type: "post", dataType: "json",
data: '{bqm:"'+bqm +'"}', contentType: 'application/json; charset=utf-8',
success: function (data) {
var bok = data.d;
var obj = JSON.parse(bok);
dataLength = obj.rows.length;
if (dataLength > 0) {
var sss = obj.rows;
var html = "<tbody><tr><td style='width:40%'>名称</td><td style='width:30%'>排序</td><td>操作</td></tr>";
for (var i = 0; i < dataLength; i++) { var a = sss[i].UNITID;
var b = sss[i].UNITNAME;
var content = sss[i].BELONGDPTID;
if (b) {
html += '<tr data-tt-id="' + a + '" data-tt-parent-id="' + b + '"><td style="width:40%">' + content + '</td><td style="width:30%">' + sss[i].SHOWINDEX + '</td><td><a class="btn" data-toggle="modal" data-target="#add_gl" data-whatever="@biaoqiangl_xg" onclick="updateBind(\'' + a + ';' + sss[i].BELONGDPTID + '\')"><img src="./images/icon-edit.png" alt="修改"></a><a class="btn" onclick="deletes(\'' + a + '\')"><img src="./images/icon-gn_17.png" alt="删除"></a></td></tr>';
}
else {
html += '<tr data-tt-id="' + a + '"><td style="width:40%">' + content + '</td><td style="width:30%";>' + sss[i].SHOWINDEX + '</td><td><a class="btn" data-toggle="modal" data-target="#add_gl" data-whatever="@biaoqiangl_xg" onclick="updateBind(\'' + a + ';' + sss[i].BELONGDPTID + '\')"><img src="./images/icon-edit.png" alt="修改"></a><a class="btn" onclick="deletes(\'' + a + '\')"><img src="./images/icon-gn_17.png" alt="删除"></a></td></tr>';
}
}
html += "</tbody>";
$('#tgProjectCustomer').append(html); loadResource(); ////重新 加载 页面引用 的 js文件 }
loadResource()开始将 table 转化成 tree—table;
var mouse;
function loadResource() {
$("link[href='js/treetable/jquery.treetable.theme.default.css']").remove(); ////将页面 引入 的3个js 文件 删除掉,在下面重新 加载
$("link[href='js/treetable/jquery.treetable.css']").remove();
$("script[src='js/treetable/jquery.treetable.js']").remove();
mouse = 0;
///每次先做出界面 然后动态加载 3个js 来渲染 table
loadjscssfile("js/treetable/jquery.treetable.css", "css", dataLength);
loadjscssfile("js/treetable/jquery.treetable.theme.default.css", "css", dataLength);
loadjscssfile("js/treetable/jquery.treetable.js", "js", dataLength); } function loadjscssfile(filename, filetype, dataLength) { ///加载 3个 文件 if (filetype == "js") {
var fileref = document.createElement('script');
fileref.setAttribute("type", "text/javascript");
fileref.setAttribute("src", filename);
mouse++;
} else if (filetype == "css") {
var fileref = document.createElement('link');
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", filename);
mouse++;
} if (typeof fileref != "undefined") {
document.getElementsByTagName("head")[0].appendChild(fileref); ///将 添加的 js文件 加载到 html文件中<script src=""></script> if (mouse == 3) { ////当3个 js 动态文件 执行成功后 调用 加载的js 文件里的方法
$("#tgProjectCustomer").treetable('destroy'); ///当第一次 执行成功后, 再次执行 要清除 上一次的 痕迹
$("#tgProjectCustomer").treetable({ expandable: true }); //执行 渲染 函数 ,把他 渲染成 树形 table
}
}
}
  $("#tgProjectCustomer").treetable('destroy'); 因为我们有查询 会多次 渲染,要把 上次 的 清除掉,否则不会生成treetable 表
到此,大功告成。
参考博客:http://blog.csdn.net/song_de/article/details/38224549 动态tree table jquery插件使用
http://blog.csdn.net/gaoqiao1988/article/details/9121961 动态加载、移除、替换js/css文件
等(忘了<^-^>)
 

treetable--.net webform中树形table表管理的应用的更多相关文章

  1. MySQL中 optimize table '表名'的作用

    语法: optimize table '表名' 一,原始数据 1,数据量 2,存放在硬盘中的表文件大小 3,查看一下索引信息 索引信息中的列的信息说明. Table :表的名称.Non_unique: ...

  2. mysql中树形结构表的操作

    一种是:邻接表模型(局限性:对于层次结构中的每个级别,您需要一个自联接,并且随着连接的复杂性增加,每个级别的性能自然会降低.在纯SQL中使用邻接列表模型充其量是困难的.在能够看到类别的完整路径之前,我 ...

  3. jQuery获取table表中的td标签

    首先我来介绍一下我遇到的问题 1.当有一个table表包含了<tr>标签,<td>标签,大致可以认为是这样的: <tr> <td> @scene.ID ...

  4. Openvswitch原理与代码分析(5): 内核中的流表flow table操作

      当一个数据包到达网卡的时候,首先要经过内核Openvswitch.ko,流表Flow Table在内核中有一份,通过key查找内核中的flow table,即可以得到action,然后执行acti ...

  5. MySQL 中 You can't specify target table '表名' for update in FROM clause错误解决办法

    在MySQL中,写SQL语句的时候 ,可能会遇到You can't specify target table '表名' for update in FROM clause这样的错误,它的意思是说,不能 ...

  6. 从Table 表中取出第 m 条到第 n 条的记录

    * FROM Table id FROM Table )) --从TABLE表中取出第m到n条记录 (Exists版本) * FROM TABLE AS a WHERE Not Exists ( * ...

  7. MySQL中You can't specify target table '表名'('sn_app_label') for update in FROM clause错误解决办法

    在有些时候有级联关系的数据放在了同一张表中,在写sql语句的时候可能会遇到这样的场景:我要插入两条数据,第一条是父节点,第二条是子节点,关联关系是父节点的自增长id:在写这样的sql语句时有可能就会出 ...

  8. 在 easyui中获取form表单中所有提交的数据 拼接到table列表中

    form表单===== <!-- 并用药品填写信息弹框 --> <div id="usingProdctMsgDiv" style="display: ...

  9. iview table表中使用render函数props传值出现问题

    使用iview中的table表格时避免不了使用render函数渲染自定义内容,或者渲染组件.但是在正常使用时出现了props传值无法识别, 按照官网介绍使用props如下: render: (h, p ...

随机推荐

  1. new ,malloc

    特征 new/delete malloc/free 分配内存的位置 自由存储区 堆 内存分配失败返回值 完整类型指针 void* 内存分配失败返回值 默认抛出异常 返回NULL 分配内存的大小 由编译 ...

  2. Url快捷方式转超链接页

    效果:(打了码  可以感受到效果) 问题: 近期发现了之前的一些网页快捷方式文件有50个  查看起来实在不方便 解决: 目前想到了两种 (书签法) (类书签法) 第一种简单快速 (当然有掌握写技巧) ...

  3. 微信公众号支付IOS系统能够唤起,安卓系统不能唤起的问题解决

    前言 之前系统内做过要给微信支付程序,只不过鉴于业务应用场景,大部分都是使用业务内的金币兑换产品,没有实际用到支付功能.后来运营小哥哥说他的手机不能唤起支付.于是乎我查询了一下资料,发现了这么个问题. ...

  4. SqlMapConfig.xml配置文件

    SqlMapConfig.xml中配置的内容和顺序如下: 1.1 properties(属性) mybatis的属性加载顺序.读取顺序:properties------>resource或url ...

  5. SpringAop之日志管理

    导入的依赖均为JavaWeb界面在线配置代码生成器这篇文章,你只需将这篇文章的maven依赖导入即可. SpringAop利用注解的特性进行日志管理,只需在对应的方法上加上自己编写的注解,即可完美实现 ...

  6. Leetcode225 用栈实现队列

    大众思路: 用两个栈实现,记为s1,s2 1.元素入栈时,加入s1 2.元素出栈时,对s2进行判断,如果s2为空,则将全部s1元素弹出并压入到s2,然后从s2栈顶弹出一个元素:如果s2不为空,则直接从 ...

  7. tomcat快速部署War包操作

    Linux快速部署War包操作,暂时是最简单的操作 1.先关闭Tomcat /home/java/tomcat7/bin/shutdown.sh 2.进入War包存放目录(可以通过工具:SSH Sec ...

  8. 关于readonly的一些说明

    readonly在代码中只能在字段初始化器和构造函数中赋值,并不是说readonly只能赋值一次,超出这个范围以后readonly就不能通过代码修改了,但是还是可以用反射来修改,readonly仅仅是 ...

  9. Ant自动化打多渠道包,Android批量打包提速

    Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...

  10. Nodejs与mysql连接池的应用(pool)

    /* * 连接池 连接和缓存的技术 * */ var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit:2 ...