好记性不如烂笔头。

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. Apache Commons-logging使用实例

    Apache Commons-logging使用实例 本文将介绍如何在程序中使用Apache Commons-logging author: ZJ 07-3-17 Blog: [url]http:// ...

  2. WC2018 滚粗记

    虽然又考炸了但还是总结一下.. $day0$:没有什么很重要的事.. $day1$:除了听(dong)课(mian)以外没有什么很重要的事.. $day2$:除了听(dong)课(mian)以外没有什 ...

  3. [原创] SiteServer 3.5 批量导入文章的SQL处理脚本

    2005时做过一个小网站,当时是用ASP+Access做的,功能很简单,但里面的文章不少 现在就像把它转移到SS上来,重点就是如何导入文章 本来SS本身提供了批量导入功能,但对于在WEB上一次性导入一 ...

  4. canny算子求图像边缘,edgebox那部分

    过程: 1.      彩色图像转换为灰度图像    2.      对图像进行高斯模糊    3.      计算图像梯度,根据梯度计算图像边缘幅值与角度(这里其实用到了微分边缘检测算子来计算梯度幅 ...

  5. javascript-数字转罗马数字

    阿拉伯数字与罗马数字转换 罗马数字表示 XXI, 21 个位数举例I, 1 ]II, 2] III, 3] IV, 4 ]V, 5 ]VI, 6] VII, 7] VIII,8 ]IX, 9 ·十位数 ...

  6. 使用cmd命令创建vue(ivieiw)项目

    条件,安装好nodejs 第一步:先使用 vue create 命令创建一个项目,等待创建完成. 1.切换目录 2.创建项目  vue create [项目名称] 第二步:切换到项目中. 第三步:使用 ...

  7. 【题解】洛谷P3435 [POI2006] OKR-Periods of Words(KMP)

    洛谷P3435:https://www.luogu.org/problemnew/show/P3435 思路 来自Kamijoulndex大佬的解释 先把题面转成人话: 对于给定串的每个前缀i,求最长 ...

  8. HDU 2048 神、上帝以及老天爷(错排概率问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2048 神.上帝以及老天爷 Time Limit: 2000/1000 MS (Java/Others) ...

  9. 随机数使用不当引发的生产bug

    前几天负责的理财产品线上出现问题:一客户赎回失败,查询交易记录时显示某条交易记录为其他人的卡号. 交易的链路如下: 出现该问题后,我们对日志进行了分析,发现主站收到的两笔流水号完全相同,然而主站却没有 ...

  10. Oracle split分区表引起ORA-01502错误

    继上次删除分区表的分区遇到ORA-01502错误后[详细见链接:Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态],最近在split分区的时候又遇到了这个问题 ...