动态加载DataGrid表头及数据
初始化表头
js生成前端
/*初始化表头*/
function initDataGridTitle(id) {
$.ajax({
url: '/${appName}/report/***/***', //根据id获取后台对应的所有类型
type: 'POST',
sync: false, //同步,为了先生成表头再加载数据
data: {
id: id
},
success: function(data) { //data后台的传过来的表字段数组
/*data格式为
[{
"subParameter": 0, //这个是类型编码
"subParameterName": "免费" //这个是类型名称
}, {
"subParameter": 52,
"subParameterName": "支付宝"
}, {
"subParameter": 53,
"subParameterName": "微信"
}, {
"subParameter": 56,
"subParameterName": "现金"
}]*/ var columns = new Array(); //多行表头字段数组[[{行一第一列},{行一第二列}][行二{},{}]]
var colData1 = []; //第一行表头,这里只有一行
colData1.push({ //第一列为固定的表头
field: 'parkingName', //列的field属性
title: '***名称', //列的title属性
'align': 'center', //列的align属性
width: fixWidth(0.2)
});
var jsonData = $.parseJSON(data); //将json字符串转换为json,尽量不要用eval('('+value+')')会执行字符串中的表达式
$.each(jsonData,function(index, value) { //遍历JsonData
var fieldVal = 'subParameter' + value.subParameter; //动态生成列的field属性(由类型+类型编码构成)
var titleVal = value.subParameterName; //动态生成列的title属性(为类型名称)
colData1.push({ //动态生成的列放入行中
field: fieldVal,
title: titleVal,
width: fixWidth(0.1)
});
}); colData1.push({ //放入行的末位列
field: 'hz_date',
title: '汇总日期',
'align': 'center',
width: fixWidth(0.2)
});
columns.push(colData1); //将所有行放入columns中去 $('#dataGrid').datagrid({ //初始化grid
fit: true,
singleSelect: true,
toolbar: '#toolBar',
columns: columns, //初始化动态生成的columns
async: false,
dataType: 'json',
url: ''
});
}
});
}
后台
SELECT DISTINCT
subParameter, -- 类型编码
subParameterName -- 类型名称
FROM
`platformtype` -- 类型表
WHERE
AND bus_subjoinplatform.parkingID = ? -- 根据id不同获取不同的参数,前端生成不同的表头
动态加载数据
js动态加载前端数据
/*动态加载数据*/
function searchInfo() {
//根据id获取对应的所有类型,从而动态加载表头
initDataGridTitle($("#id").val());
//获取数据
$.ajax({
url: '/${appName}/report/***/getList',
type: 'POST',
sync: false,
data: {
time: $('#time').datebox('getValue'),
id: $("# id").val()
},
success: function(data) { //data后台的传过来的表字段数组
/*data返回的数据类型
{
"rows": [{
"hz_date": "2018-11-19",
"parkingId": "cd292667-3110-40ec-8088-c70c336cb38c",
"parkingName": "**",
"subParameterName": "支付宝",
"zjmoney": "2200",
"zjtype": "52"
}, {
"hz_date": "2018-11-19",
"parkingId": "cd292667-3110-40ec-8088-c70c336cb38c",
"parkingName": "***",
"zjmoney": "2500",
"subParameterName": "IC",
"zjtype": "51"
}, {
"hz_date": "2018-11-19",
"parkingId": "cd292667-3110-40ec-8088-c70c336cb38c",
"parkingName": "***",
"subParameterName": "微信",
"zjmoney": "1100",
"zjtype": "53"
}],
"currentTime": "2018-11-19"
}
*/
var jsonResult = new Array(); //最终结果
var jsonData = $.parseJSON(data); //将返回的data转换为json
var rows = jsonData.rows; /*将返回的list转换成以id分类的type组合成数组的一条记录[{id,name,[type1,type2,type3]}]*/
var map = {}, //map的作用是标志位,判断此id是否已经存在
//以停车场为单位的map
dest = []; //最终输出
$.each(rows,function(index,row) { //遍历每一行
if (!map[row.id]) { //如果map中不存在
dest.push({ //直接将数据拼接成一个{id,name,[type1]}
id: row.id, //根据id和name分类
parkingName: row.parkingName,
hz_date: row.hz_date,
data: [row.zjtype + ',' + row.zjmoney], //多个type,将每条记录的type和money拼接成一个元素放入data数组中
});
map[row.id] = row.id; //将未加入map的key放入,下次再判断则说明dest中已经有此id的数据
} else { //如果已经存在
for (var j = 0; j < dest.length; j++) { //遍历所有dest
var temp = dest[j];
if (temp.id = row.id) { //找到当前row的id已经存在于dest中的元素
temp.data.push(row.zjtype + ',' + row.zjmoney); //获取dest中的这个元素的data数组,并放入新的type类型{id,name,[type1,type2]}
break; //跳出循环,优化代码,已经找到了,没必要继续
}
}
}
}); //循环结束
/*到此dest生成的数据为,data为zjtype和zjmoney的组合
[{
parkingId: "1111",
parkingName: "***",
hz_date: "2018-11-19",
data: ["52,2200", "51,2500", "53,1100"]
},{
parkingId: "33333",
parkingName: "***",
hz_date: "2018-12-19",
data: ["43,2200", "44,2500", "45,1100"]
}]
*/ //将[{id,name,[type1,type2,type3]},{id2,name2,[type11,type22,type33]}]转换为list
$.each(dest,function(index, val) { //遍历每个id的记录
var typefields = ''; //
for (var i = 0; i < val.data.length; i++) { //遍历type和money组成的data数组
var temp = val.data[i]; //type和money的元素
var typeAndMoney = temp.split(','); //分割为type和money两个元素
typefields += ",\"subParameter" + typeAndMoney[0] + "\":\"" + parseInt(typeAndMoney[1]) / 100 + "\""; //将type的code和固定字符串拼接成field,将money作为field的值
}
var row = "{\"hz_date\":\"" + val.hz_date + "\",\" id\":\"" + val.id + "\",\"parkingName\":\"" + val.parkingName + "\"" + typefields + "}"; //其他的数据和type集合拼接成一行记录数据{field1:val1,feild2:val2}
var fieldJson = $.parseJSON(row); //将这拼接的一行json字符串转换为json记录
jsonResult.push(fieldJson); //将json记录放入数组中去
});
/*jsonResult的数据格式为
[{
hz_date: "2018-11-19",
parkingId: "cd292667",
parkingName: "**",
subParameter12: "22",
subParameter13: "25",
},{
hz_date: "2018-11-19",
parkingId: "c70c336cb38c",
parkingName: "***",
subParameter23: "22",
subParameter24: "25",
}]
*/
//console.info(jsonResult); //打印json
$('#dataGrid').datagrid('loadData', { //将生成的json数据加载到datagrid中去
"total": jsonResult.length,
"rows": jsonResult
});
},
onLoadSuccess: function(data) {
$(this).datagrid("fixRowHeight");
}
});
}
后台
SELECT
tcc.parkingId,-- id
tcc.zjtype,-- 类型
tcc.zjmoney as zjmoney,-- 金额
tcc.hz_date -- 日期 FROM
hz_tcczj_date tcc -- 记录表,记录id,typecode和money
where tcc.parkingId IN ( 'cd292667-3110' )
简写版,事实需要关联其他表,根据需求group by,但是只要数据符合下图即可.

动态加载DataGrid表头及数据的更多相关文章
- eCharts动态加载各省份的数据
假如从数据库读出以下数据,如何将数据展示在地图之上 1.部门的名称数据: List deptname=[联通事业部-上海联通项目组, 联通事业部-河南联通项目组, 联通事业部-贵州联通项目组, 联通事 ...
- Cortex-M3 动态加载二(RWPI数据无关实现)
上一篇关于动态加载讲述的是M3下面的ropi的实现细节,这一篇则讲述RW段的实现细节以及系统加载RW段的思路,我在M3上根据这个思路可以实现elf的动态加载,当然进一步的可以优化很多东西,还可以研究将 ...
- html中的数据岛:利用DSO和javascript在html中动态加载和浏览xml数据
1.DSO也叫做数据源对象,IE 4.0引入了DSO,在IE 5.0对DSO技术进行很大的扩展.以往如果数据是通过SQL语言对数据库进行查询得到的结果,那么就把它们存放在ADO(ActiveX Dat ...
- EasyUI - tab动态加载datagrid
addTab: function() { $("#myTabs").tabs('add', { title: 'my title', closable: true, tools: ...
- eayui js动态加载Datagrid,自适应宽度,高度
HTML: <div class="easyui-layout" style="min-height:100%;min-width:100%;"> ...
- selenuim和phantonJs处理网页动态加载数据的爬取
一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding:utf-8 -* ...
- 爬虫开发6.selenuim和phantonJs处理网页动态加载数据的爬取
selenuim和phantonJs处理网页动态加载数据的爬取阅读量: 1203 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/ ...
- 6-----selenuim和phantonJs处理网页动态加载数据的爬取
动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding ...
- Extjs-树 Ext.tree.TreePanel 动态加载数据
先上效果图 1.说明Ext.tree.Panel 控件是树形控件,大家知道树形结构在软件开发过程中的应用是很广泛的,树形控件的数据有本地数据.服务器端返回的数据两种.对于本地数据的加载,在extjs的 ...
随机推荐
- Linux系统PWM驱动【转】
本文转载自:https://blog.csdn.net/BorntoX/article/details/51879786 硬件平台:IMX6 内核版本:kernel3.0.35 在linux内核中有一 ...
- 160CrackMe练手 002
首先查壳无壳,输入伪码报错,根据报错od查找字符串,定位到错误代码附近,可以看到有个条件跳转,改掉就可以爆破,接下来分析下注册算法,我们周围看看,从最近几个call看,并没有我们输入的用户名在堆栈中出 ...
- 使用Numpy实现卷积神经网络(CNN)
import numpy as np import sys def conv_(img, conv_filter): filter_size = conv_filter.shape[1] result ...
- 基于OpenNetVM配置环境的发包实践
参考: openNetVM 基于OpenNetVM配置环境的发包实践 注意:本文并未对OpenNetVM的服务链进行测试,而是在借助OpenNetVM脚本环境的情况下,分别对Pktgen和MoonGe ...
- sublime text 中文显示异常
本文链接:sublime text 中文显示异常 http://www.cnblogs.com/daysme/p/7549857.html 前言 sublime text 3143 用了一年时候,最近 ...
- 【搬运工】——Java中的static关键字解析(转)
原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大 ...
- React Naive 解决防止多次点击的解决方法
export default class TouchableOpacity extends Component { render() { return ( <TouchableOpacity a ...
- 同上两篇 这篇是关于shader的
资源加载性能测试代码 与上篇所提出的测试代码一样,我们对于Shader资源的加载性能分析同样使用该测试代码.同时,我们将Shader文件制作成一定大小的AssetBundle文件,并逐一通过以下代码在 ...
- Reference SoftReference WeakReference PhantomReference Cleaner 的研究与实践
最近在看netty的时候看到直接内存的相关概念,为了更详细的了解一下具体原理,搜到了一篇不错的文章 http://lovestblog.cn/blog/2015/05/12/direct-buffer ...
- Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
解决方法: 如果安装的是GPU版本 如果你有一个GPU,你不应该关心AVX的支持,因为大多数昂贵的操作将被分派到一个GPU设备上(除非明确地设置).在这种情况下,您可以简单地忽略此警告: import ...