treetable--.net webform中树形table表管理的应用
好记性不如烂笔头。
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表管理的应用的更多相关文章
- MySQL中 optimize table '表名'的作用
语法: optimize table '表名' 一,原始数据 1,数据量 2,存放在硬盘中的表文件大小 3,查看一下索引信息 索引信息中的列的信息说明. Table :表的名称.Non_unique: ...
- mysql中树形结构表的操作
一种是:邻接表模型(局限性:对于层次结构中的每个级别,您需要一个自联接,并且随着连接的复杂性增加,每个级别的性能自然会降低.在纯SQL中使用邻接列表模型充其量是困难的.在能够看到类别的完整路径之前,我 ...
- jQuery获取table表中的td标签
首先我来介绍一下我遇到的问题 1.当有一个table表包含了<tr>标签,<td>标签,大致可以认为是这样的: <tr> <td> @scene.ID ...
- Openvswitch原理与代码分析(5): 内核中的流表flow table操作
当一个数据包到达网卡的时候,首先要经过内核Openvswitch.ko,流表Flow Table在内核中有一份,通过key查找内核中的flow table,即可以得到action,然后执行acti ...
- 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这样的错误,它的意思是说,不能 ...
- 从Table 表中取出第 m 条到第 n 条的记录
* FROM Table id FROM Table )) --从TABLE表中取出第m到n条记录 (Exists版本) * FROM TABLE AS a WHERE Not Exists ( * ...
- MySQL中You can't specify target table '表名'('sn_app_label') for update in FROM clause错误解决办法
在有些时候有级联关系的数据放在了同一张表中,在写sql语句的时候可能会遇到这样的场景:我要插入两条数据,第一条是父节点,第二条是子节点,关联关系是父节点的自增长id:在写这样的sql语句时有可能就会出 ...
- 在 easyui中获取form表单中所有提交的数据 拼接到table列表中
form表单===== <!-- 并用药品填写信息弹框 --> <div id="usingProdctMsgDiv" style="display: ...
- iview table表中使用render函数props传值出现问题
使用iview中的table表格时避免不了使用render函数渲染自定义内容,或者渲染组件.但是在正常使用时出现了props传值无法识别, 按照官网介绍使用props如下: render: (h, p ...
随机推荐
- BIND简易教程(0):在Ubuntu下源码安装BIND(其实跟前面的教程没太大关系)
之前介绍过BIND的基本使用啦.关于BIND的入门级使用方法见:http://www.cnblogs.com/anpengapple/p/5877661.html简易教程系列,本篇只讲BIND安装. ...
- ZooKeeper介绍与环境搭建
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...
- 2019.1.2 Spring管理事务的方式
Spring管理事务的方式 1.编码式 1.将核心事务管理器配置到Spring容器 2.配置TransactionTemplate模版 3.将事务模版注入service 4.在Service中调用模版 ...
- es6之数据结构
1.set的用法 用add方法添加元素,添加的数组不可重复. 可利用set类型添加元素不重复的功能,给数组完成去重的功能 size属性用于获取set元素的长度 { let list =new Set( ...
- 二十二、详述 IntelliJ IDEA 中恢复代码的方法
在咱们正常开发项目的时候,难免遇到在开发过程中由于某种原因,想要将代码恢复到前一版本的情景.特别是在咱们删除了某些代码,想要恢复之前删除的代码的时候,了解这个在 IntelliJ IDEA 中恢复代码 ...
- 使用jQuery实现伪分页
在之前的项目中遇到一个这样的问题,页面分为上下两部分(分别称为未选中设备信息部分和选中设备信息部分),上面是从数据库拿出来的所有的设备信息,下面是显式已选中的设备信息,页面如下所示: 可以选中其中的任 ...
- javascript中filter方法
array1.filter(callbackfn[, thisArg]) 參數 參數 定義 array1 必要項. 陣列物件. callbackfn 必要項. 最多接受三個引數的函式. filte ...
- 【题解】UVA10298 Power String(KMP)
UVA10298:https://www.luogu.org/problemnew/show/UVA10298 思路 设P[x]数组为 前x个字符的最大前缀长度等于后缀字串 由P数组的定义我们可以知道 ...
- GPIO 配置示例
概述:学习STM32的GPIO configration /********************************************************************** ...
- JQuery手写一个简单的分页
效果图: 大概思路:使用ul进行初始布局,每一次点击事件改变li里的值.完整的代码在gitup上:https://github.com/anxizhihai/Paging.gitcss部分: html ...