很多时候我们的datagrid需要动态的列显示,那么这个时候我们后台一般提供最直观的数据格式tree结构。那么需要我们前端自己根据这个tree结构转换成easyui的datagrid的columns。那么经过跟后台大神(陈汉军)同事一起的研究最后我整理了一个下面的函数来提供转换。

/*
*@author:yeminglong
*@date:2018/06/22
*@email:ye583025823@126.com
*@description:把treeNOde转换成easyui的datagrid或者treegrid的columns
*用法:
* var treeNode=[{text:"节点1",value:"myName","children";[{
"text": "ziduan51",
"value": "ziduan51",
"children": []
}]}];
* var columns= treeToColumns(treeNode);
*原理:先把treeNode的level计算出来,然后获取最大的maxLevel。
*跨行公式=maxLevel-currentNode.level+1;
*跨列公式=currentNode的children的childrenNode的children的length的和。
*感谢:陈汉军同学为本函数提供算法参考。本文的算法来自 陈汉军 同学的指导。再次感谢。
*/
(function (wd) {
var allLevel = [0],
maxLevel = 0,
columns = []; //获取最大层级
function getMaxLevel(allLevel) {
return Math.max.apply(null, allLevel);
} //把数据结构转换成自己需要的基本属性
function convert(nodes, parentNode) {
var node,
i = 0;
try {
for (; i < nodes.length; i++) {
node = nodes[i];
if (!parentNode) {
node.level = 0;
} else {
node.level = parentNode.level + 1;
allLevel.push(node.level);
} if (node.children.length > 0) {
node.cp = node.children.length;
convert(node.children, node);
}
else {
node.cp = 1;
}
}
} catch (e) {
//console.log();
} return nodes;
} //获取跨列
function getCospan(node) {
var colspan = 0;
for (var j = 0; j < node.children.length; j++) {
if(node.children[j].cp>1){
colspan +=getCospan(node.children[j]);
}else{
colspan += node.children[j].cp;
}
}
return colspan;
} //开始转换
function convert2(nodes, parentNode) {
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
if (!columns[node.level]) {
columns[node.level] = [];
}
if (node.children.length > 0) {
columns[node.level].push({
field: node.value,
title: node.text,
rowspan: 1,
colspan: getCospan(node),
width: 200,
align: 'center'
});
convert2(node.children, node);
} else {
columns[node.level].push({
field: node.value,
title: node.text,
rowspan: (maxLevel - node.level + 1),
colspan: 1,
width: 200,
align: 'center'
});
} }
return columns;
} //提供给外面的全局函数
wd.treeToColumns = function (treeNode) {
allLevel = [0],
maxLevel = 0,
columns = [];
var node2 = convert(treeNode, null);
maxLevel = getMaxLevel(allLevel);
//console.log(maxLevel);
columns = convert2(node2);
//console.log(columns);
return columns;
} })(window);

用法示例:

var gridTitle = [
{
"text": "ziduan1",
"value": "ziduan1",
"children": [
{
"text": "ziduan11",
"value": "ziduan11",
"children": [
{
"text": "ziduan51",
"value": "ziduan51",
"children": []
},
{
"text": "ziduan52",
"value": "ziduan52",
"children": []
},
{
"text": "ziduan53",
"value": "ziduan53",
"children": []
},
{
"text": "ziduan54",
"value": "ziduan54",
"children": []
},
{
"text": "ziduan55",
"value": "ziduan55",
"children": []
}
]
},
{
"text": "ziduan12",
"value": "ziduan12",
"children": []
},
{
"text": "ziduan13",
"value": "ziduan13",
"children": []
},
{
"text": "ziduan14",
"value": "ziduan14",
"children": []
},
{
"text": "ziduan15",
"value": "ziduan15",
"children": []
}
]
},
{
"text": "ziduan2",
"value": "ziduan2",
"children": [
{
"text": "ziduan21",
"value": "ziduan21",
"children": []
},
{
"text": "ziduan22",
"value": "ziduan22",
"children": []
},
{
"text": "ziduan23",
"value": "ziduan23",
"children": []
},
{
"text": "ziduan24",
"value": "ziduan24",
"children": []
},
{
"text": "ziduan25",
"value": "ziduan25",
"children": []
}
]
},
{
"text": "ziduan3",
"value": "ziduan3",
"children": [
{
"text": "ziduan31",
"value": "ziduan31",
"children": []
},
{
"text": "ziduan32",
"value": "ziduan32",
"children": []
},
{
"text": "ziduan33",
"value": "ziduan33",
"children": []
},
{
"text": "ziduan34",
"value": "ziduan34",
"children": []
},
{
"text": "ziduan35",
"value": "ziduan35",
"children": []
}
]
},
{
"text": "ziduan4",
"value": "ziduan4",
"children": [
{
"text": "ziduan41",
"value": "ziduan41",
"children": []
},
{
"text": "ziduan42",
"value": "ziduan42",
"children": []
},
{
"text": "ziduan43",
"value": "ziduan43",
"children": []
},
{
"text": "ziduan44",
"value": "ziduan44",
"children": []
},
{
"text": "ziduan45",
"value": "ziduan45",
"children": []
},
]
},
{
"text": "ziduan5",
"value": "ziduan5",
"children": [
{
"text": "ziduan46",
"value": "ziduan46",
"children": []
},
{
"text": "ziduan47",
"value": "ziduan47",
"children": [ {
"text": "ziduan56",
"value": "ziduan56",
"children": []
},
{
"text": "ziduan57",
"value": "ziduan57",
"children": []
},
{
"text": "ziduan58",
"value": "ziduan58",
"children": []
},
{
"text": "ziduan59",
"value": "ziduan59",
"children": []
},
{
"text": "ziduan60",
"value": "ziduan60",
"children": []
}
]
},
{
"text": "ziduan48",
"value": "ziduan48",
"children": []
},
{
"text": "ziduan49",
"value": "ziduan49",
"children": []
},
{
"text": "ziduan50",
"value": "ziduan50",
"children": []
}
]
},
{
"text": "ziduan77",
"value": "ziduan77",
"children": [
{
"text": "ziduan78",
"value": "ziduan78",
"children": []
}
]
},
{
"text": "ziduan79",
"value": "ziduan79",
"children": [
{
"text": "ziduan80",
"value": "ziduan80",
"children": [{
"text": "ziduan81",
"value": "ziduan81",
"children": []
}]
}
]
} ];
var columns=treeToColumns(gridTitle);
$('#div1').datagrid({
fit: true,
columns: columns
})

如果这篇文章对您有帮助,您可以打赏我,您的打赏让我会更有动力。

技术交流QQ群:15129679

 
 

把tree结构数据转换easyui的columns的更多相关文章

  1. mktime(将时间结构数据转换成经过的秒数)

    mktime(将时间结构数据转换成经过的秒数)表头文件#include<time.h>定义函数time_t mktime(strcut tm * timeptr);函数说明mktime() ...

  2. 数据网格和树-EasyUI Datagrid 数据网格、EasyUI Propertygrid 属性网格、EasyUI Tree 树、EasyUI Treegrid 树形网格

    EasyUI Datagrid 数据网格 扩展自 $.fn.panel.defaults.通过 $.fn.datagrid.defaults 重写默认的 defaults. 数据网格(datagrid ...

  3. easyui datagrid columns 如何取得json 内嵌对象(many-to-one POJO class)

    http://www.iteye.com/problems/44119 http://hi.baidu.com/lapson_85/item/7733586e60b08500a1cf0f8d ———— ...

  4. B-tree & B+tree & B*Tree 结构浅析——转

    转自http://www.cnblogs.com/coder2012/p/3330311.html http://blog.sina.com.cn/s/blog_6776884e0100ohvr.ht ...

  5. 数据库查询,显示为树形结构(easyui+SSM)

    在实际项目上,有很多地方后台存了一个表,但是在显示查询的时候需要显示为树形结构. 本项目是easyui+SSM框架. 前台程序为: <!DOCTYPE html> <html> ...

  6. B-Tree 和 B+Tree 结构及应用,InnoDB 引擎, MyISAM 引擎

    1.什么是B-Tree 和 B+Tree,他们是做什么用的? B-Tree是为了磁盘或其它存储设备而设计的一种多叉平衡查找树,B-Tree 和 B+Tree 广泛应用于文件存储系统以及数据库系统中. ...

  7. 【技术宅6】把一个无限级分类循环成tree结构

    function list_to_tree($list,$root=0,$pk='cid',$pid = 'pid',$child = '_child'){ if(is_array($list)) { ...

  8. EasyUI datagrid columns 中 field 区分大小写

    columns: [ [ {field: 'id', title: 'ID'}, {field: 'name', title: 'NAME'}, {field: 'DT_CRT_TM', title: ...

  9. tree结构统一修改属性名(递归)

    1 //data为需要修改的tree,这里主要是为antd design 里面select规范数据 const ass = (data) => { let item = []; data.map ...

随机推荐

  1. strchr()的用法

    strchr()主要有2个最有用的用法: 第一个:搜索字符串在另一字符串中的第一次出现.并返回剩余的部分 $str = "hello_chrdai_1993"; $not_incl ...

  2. 微信公众号开发JS-SDK(1.2)

    概述 微信js-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微 ...

  3. python 全栈开发,Day40(进程间通信(队列和管道),进程间的数据共享Manager,进程池Pool)

    昨日内容回顾 进程 multiprocess Process —— 进程 在python中创建一个进程的模块 start daemon 守护进程 join 等待子进程执行结束 锁 Lock acqui ...

  4. VMware虚拟机 Ubuntu 16.04 安装

    第一步:VMware虚拟机 Ubuntu 16.04 安装 第二步: 解决窗口全屏问题 linux下给root用户设置密码 修改root用户的密码 $ sudo passwd root 密码会要求重复 ...

  5. ahoi2009维护序列

    链接:https://www.luogu.org/problemnew/show/P2023 裸的线段树维护+* 代码: #include <bits/stdc++.h> using na ...

  6. Docker 镜像的导入和导出

    镜像的导入和导出 export 和improt [root@#localhost docker]# docker run -ti ubuntu:update /bin/bash root@cbe3cb ...

  7. JsBom

    BOM 所谓BOM指的是浏览器对象模型 Browser Object Model,它的核心就是浏览器 Bom浏览器对象模型 1.bom输出 <!DOCTYPE html> <html ...

  8. Linux上的压缩与归档

    非常非常非常简要的描述而已. 压缩 压缩的简要原理是通过一些算法,拿CPU的计算时间去换磁盘上存储的空间.同时还可节省网络传输中的带宽. 对于文本文件的压缩效果比较好,对二进制程序.图片等文件的压缩效 ...

  9. 基本功 | Litho的使用及原理剖析

    1. 什么是Litho? Litho是Facebook推出的一套高效构建Android UI的声明式框架,主要目的是提升RecyclerView复杂列表的滑动性能和降低内存占用.下面是Litho官网的 ...

  10. python+imageMagick写的一个压缩图片脚本

    !/usr/bin/python import os import cPickle as p import re import Image def imageCompre(imagedir = '.' ...