动态加载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的 ...
随机推荐
- Manjaro kde 18.0安装与基本配置
目录 更换源镜像.更新系统 安装搜狗输入法 安装软件 系统配置 最后清理垃圾 首先用Rufus制作启动U盘安装,设置好时间和日期等 更换源镜像.更新系统 排列源(只选清华源mirrors.tuna.t ...
- (转)Jenkins持续集成
(二期)14.持续集成工具jenkins [课程14]持续集...概念.xmind0.6MB [课程14]持续集成...kins.xmind43.3KB [课程14预习]持续...kins.xmind ...
- 【配置】log4j.properties 详解与配置步骤
一.Log4j基本使用方法 Log4j由三个重要的组件构成:[日志信息的优先级],[日志信息的输出目的地],[日志信息的输出格式]. 日志信息的优先级从高到低有ERROR.WARN. INFO.DEB ...
- Print a file's last modified date in Bash
date -r <filename> #!/usr/bin/env bash for i in /var/log/*.out; do stat -f "%Sm" -t ...
- HihoCoder 1195 高斯消元·一(高斯消元)
题意 https://hihocoder.com/problemset/problem/1195 思路 高斯消元是解决高元方程的一种算法,复杂度 \(O(n^3)\) . 过程大致是: 构造一个未知数 ...
- 【译】第39节---EF6-数据库命令日志
原文:http://www.entityframeworktutorial.net/entityframework6/database-command-logging.aspx 本节,我们学习如何记录 ...
- Leetcode122-Best Time to Buy and Sell Stock II-Easy
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- HDU 5726 GCD(RMQ+二分)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5726 题意:给出一串数字,现在有多次询问,每次询问输出(l,r)范围内所有数的gcd值,并且输出有多 ...
- php的Allowed memory size of 134217728 bytes exhausted问题
提示Allowed memory size of 134217728 bytes exhausted,出现这种错误的情况常见的有三种: 0:查询的数据量大. 1:数据量不大,但是php.ini配置的内 ...
- activity 运行流程图