好记性不如烂笔头。

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. mongodb在windows平台安装和启动

    mongodb 官网:https://www.mongodb.com mongodb 官网下载: mongodb-win32-x86_64-2008plus-ssl-3.4.2-signed.msi ...

  2. BZOJ2438:[中山市选2011]杀人游戏(强连通分量)

    Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手.警察能够对每一个人 进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是 ...

  3. Vue通过input筛选数据

    <div id="app"> <input v-model='search' /> <ul> <li v-for="item i ...

  4. BootstrapTable返回结果集递增序号

    { 'field': '', 'title': '序号', 'align': 'center', 'width': '5%', 'formatter': function (value, row, i ...

  5. springmvc进阶(5):mvc:default-servlet-handler详解

    我们在配置dispatchServlet时配置<url-pattern>/</url-pattern>拦截所有请求,这时候dispatchServlet完全取代了default ...

  6. 前端面试题(copy)

    前端开发面试知识点大纲: HTML&CSS: 对Web标准的理解.浏览器内核差异.兼容性.hack.CSS基本功:布局.盒子模型.选择器优先级及使用.HTML5.CSS3.移动端适应. Jav ...

  7. ARM Linux 大小核切换 ——cortex-A7 big.LITTLE 大小核 切换代码分析

    ARM Linux 大小核切换——cortex-A7 big.LITTLE 大小切换代码分析 8核CPU或者是更多核的处理器,这些CPU有可能不完全对称.有的是4个A15和4个A7,或者是4个A57和 ...

  8. IDEA 相关问题

    IntelliJ Idea 常用快捷键列表   Alt+回车 导入包,自动修正Ctrl+N   查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L  格式化代码 Ctrl+Alt+O 优化导 ...

  9. hdu_4465_Candy

    LazyChild is a lazy child who likes candy very much. Despite being very young, he has two large cand ...

  10. 常用模块 - datetime模块

    一.简介 datetime是Python处理日期和时间的标准库. 1.datetime模块中常用的类: 类名 功能说明 date 日期对象,常用的属性有year, month, day time 时间 ...