初始化表头

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表头及数据的更多相关文章

  1. eCharts动态加载各省份的数据

    假如从数据库读出以下数据,如何将数据展示在地图之上 1.部门的名称数据: List deptname=[联通事业部-上海联通项目组, 联通事业部-河南联通项目组, 联通事业部-贵州联通项目组, 联通事 ...

  2. Cortex-M3 动态加载二(RWPI数据无关实现)

    上一篇关于动态加载讲述的是M3下面的ropi的实现细节,这一篇则讲述RW段的实现细节以及系统加载RW段的思路,我在M3上根据这个思路可以实现elf的动态加载,当然进一步的可以优化很多东西,还可以研究将 ...

  3. html中的数据岛:利用DSO和javascript在html中动态加载和浏览xml数据

    1.DSO也叫做数据源对象,IE 4.0引入了DSO,在IE 5.0对DSO技术进行很大的扩展.以往如果数据是通过SQL语言对数据库进行查询得到的结果,那么就把它们存放在ADO(ActiveX Dat ...

  4. EasyUI - tab动态加载datagrid

    addTab: function() { $("#myTabs").tabs('add', { title: 'my title', closable: true, tools: ...

  5. eayui js动态加载Datagrid,自适应宽度,高度

    HTML: <div class="easyui-layout" style="min-height:100%;min-width:100%;"> ...

  6. selenuim和phantonJs处理网页动态加载数据的爬取

    一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding:utf-8 -* ...

  7. 爬虫开发6.selenuim和phantonJs处理网页动态加载数据的爬取

    selenuim和phantonJs处理网页动态加载数据的爬取阅读量: 1203 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/ ...

  8. 6-----selenuim和phantonJs处理网页动态加载数据的爬取

    动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding ...

  9. Extjs-树 Ext.tree.TreePanel 动态加载数据

    先上效果图 1.说明Ext.tree.Panel 控件是树形控件,大家知道树形结构在软件开发过程中的应用是很广泛的,树形控件的数据有本地数据.服务器端返回的数据两种.对于本地数据的加载,在extjs的 ...

随机推荐

  1. C#操作字符串方法总结

    /* ######### ############ ############# ## ########### ### ###### ##### ### ####### #### ### ####### ...

  2. 弄懂linux shell对包含$的变量的执行过程?

    参考: http://www.linuxidc.com/Linux/2012-04/58095.htm 在包含变量的命令中, 命令是怎么执行的呢? 首先, 它会原封不动的, 只是按原样替换变量的内容. ...

  3. 数论+矩阵快速幂|斐波那契|2014年蓝桥杯A组9-fishers

    标题:斐波那契 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 .... (x=1,2) f(x) = f(x-1) + f(x-2) .... (x>2) 对于给定的整数 n 和 ...

  4. 大臣的旅费|2013年蓝桥杯A组题解析第十题-fishers

    标题:大臣的旅费 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市 ...

  5. Paper Read: Robust Deep Multi-modal Learning Based on Gated Information Fusion Network

    Robust Deep Multi-modal Learning Based on Gated Information Fusion Network 2018-07-27 14:25:26 Paper ...

  6. it做形式主语的句子

    1. it was considerate of you to visit my mother every day and (to) bring me your notes to help me wi ...

  7. facebook api之Marketing API

    General information on the Marketing APIs, access, versioning and more. The main use cases for the M ...

  8. 33 Python 详解命令解析 - argparse--更加详细--转载

    https://blog.csdn.net/lis_12/article/details/54618868 Python 详解命令行解析 - argparse Python 详解命令行解析 - arg ...

  9. React Native组件之BackAndroid !安卓手机的物理返回键的使用

    ok!在安卓手机上,当我们用物理返回键的时候,会以一次性的将程序退出来,这样是很不好的体验,所以就需要使用RN的物理返回键组件:BackAndroid,其原理也就是 分析路由,然后pop()这样! o ...

  10. P1622 释放囚犯

    传送门 区间DP简介: 在写这题前,需要先弄清楚区间DP是如何操作的: 区间DP的做法还是相对固定的,没有其他类型DP的复杂多变.主要思想就是先在小区间进行DP得到最优解,然后再利用小区间的最优解合并 ...