需求:一个id对应多个key value 将id作为标识列 key值作为表头 value作为值显示。数据表可分为两张表

param数据表:

下表一个id对应上表多个key及value 如下图 id_param数据表:

然后将这些对应关系在前端显示成这样(页数及总记录没有显示,但可实现分页功能)

方法思路

1.获取param的key value 作为 columns当做表头信息 key作为表头的field,value作为表头的title;

2.获取id_param的所有id(不重复的),构成ids,ids的size 作为总记录数;

3.新建一个map的list对象mapputs。对ids进行遍历,每次遍历的id作为查询条件查询id_param获取每条id对应的key,value,构成一个HashMap对象 mapput。每次遍历结束将mapput加入mapputs中。

实现代码:

创建实体类Test(getter setter方法省略)

     private String key;//参数名称
private String value;//参数内容
private String key_cn;//参数中文名称 用于显示表头的title

后台获取数据方法

 @RequestMapping(value = "/test.do", method = RequestMethod.POST)
public
@ResponseBody
String test(HttpServletRequest request, HttpServletResponse response, Model model, String type, String page, String rows) {
Map map = new HashMap();
List<Test> columns = licenseService.getColumns();//查询param表 获取表头信息 sql语句 SELECT `key`,`key_cn` FROM test.`param`
List<String> ids = licenseService.getIds();//查询id_params中 不重复的 id集合 SELECT DISTINCT id FROM test.`id_param` ORDER BY id
List<Map> mapputs = new ArrayList<Map>();//用于添加对 ids 每次遍历中获得的mapput
for(String id : ids){
map.put("id",id);//放入此次查询需要的id
Map mapput = new HashMap();
List<Test> list = licenseService.getTestListById(map);//根据id 获取对应key value 的list
for(Test test : list){
mapput.put(test.getKey().toLowerCase(),test.getValue());//对list进行遍历 将key value放入mapput中
}
mapputs.add(mapput);//结束一次遍历添加此次获得的mapput
}
map.put("total",ids.size());//将ids的长度作为记录的总数传入
map.put("columns",columns);
map.put("mapputs",mapputs);
return gson.toJson(map);//将对象转为json数据 gson工具类是com.google.gson
}

前端代码

 <div data-options="region:'center',title:'Test'">
<table id="userList" class="easyui-datagrid" style="width:100%;" height=100% border="0px" title="Test"
data-options="rownumbers:true,singleSelect:true" pagination="true">
</table>
</div>

js代码

 <script type="text/javascript">
$(function () {
var paramdata = getparam(1, 10);//首次加载 获取第一页10条记录的数据
processparam(paramdata);//处理thead和tbody信息
$("#userList").datagrid("getPager").pagination({//更换页数和每页记录数时重新加载表格数据
onSelectPage: function (pageNumber, pageSize) {
var page = pageNumber;
var rows = pageSize;
paramdata = getparam(page, rows);
processparam1(paramdata);//只加载tbody信息
}
});
}) //根据页数和每页记录数记录获取数据
function getparam(page, rows) {
var page = page;
var rows = rows;
var paramdata;
$.ajax({
url: "${pageContext.request.contextPath}/license/test.do",
async: false,//异步 false return值
data: {
"page": page,//当前页
"rows": rows,//每页记录数
},
type: 'POST',
dataType: 'json',
success: function (data) {//data后台的传过来的表字段数组
paramdata = data;
}
});
return paramdata;
} //加载columns和data数据 用于重新加载页面时第一次生成表格确定表头数据
//注意:此方法仅适用于第一次加载页面和重新加载页面生成表格 在点击下一页等使用分页功能时若使用此方法加载数据会导致表格重新生成,分页功能不可用 故在分页时使用processparam1方法只加载tbody数据 不重新生成表格
function processparam(data) {
var array = [];
var columns = [];
$(data.columns).each(function (index, el) {
array.push({field: '', title: '', width: '', align: 'center'});//初始化表头的属性
});
var successData = {
total: data.total,//总记录数
rows: data.mapputs,//每页显示行数
};
columns.push(array);
$(data.columns).each(function (index, el) {
columns[0][index]['field'] = el.key.toLocaleLowerCase();//field赋值 注意field 一定要与 后台传来的mapputs集合里mapput的key 相等!
columns[0][index]['title'] = el.key_cn;//title赋值
});
var userList = $('#userList')//加载数据 生成表格
.datagrid({
columns: columns,
data: successData,
rownumbers: true,
singleSelect: true,
pagination: true,
});
} //根据分页参数传来的page rows得到的data 加载tbody数据
function processparam1(data) {
//只加载tbody数据
var successData = {
total: data.total,
rows: data.mapputs
}
$('#userList').datagrid('loadData', successData);
}
//与主体方法无关 若需要在页面当前的page rows基础上刷新表格 可使用此方法
function reloadUserList() {
var table = $('#userList');
var options = table.datagrid('getPager').data("pagination").options;
var page = options.pageNumber;
var rows = options.pageSize;
var paramdata = getparam(page, rows);
if (paramdata.mapputs.length <= 0) {//若用户删除当前页面的最后一条记录 刷新当前页会无记录可显示 所以判断传入数据是否为空 若为空则重新加载当前页面 返回第一条页面
window.location.reload();
}
processparam1(paramdata);//不为空则加载重新获取到的数据
}
</script>

easyui动态生成列的更多相关文章

  1. EasyUI 动态生成列加分页

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  2. jQuery EasyUI中DataGird动态生成列的方法

    EasyUI中使用DataGird显示数据列表中,有时需要根据需要显示不同的列,例如,在权限管理中,不同的用户登录后只能查看自己权限范围内的列表字段,这就需要DataGird动态组合列,下面介绍Eas ...

  3. easyui动态生成双列头

    实习时老大交给任务,让我做这样一个效果,选择日期并点击查询时,动态生成列头,下一列要求对应日期的星期. 效果图: 下面贴出查询的单击函数: //查询按钮 function queryByDate(){ ...

  4. WPF Datagrid 动态生成列 并绑定数据

    原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用  可 ...

  5. EasyUI datagrid动态生成列

    任务描述:根据用户选择时间段,生成列数据,如图

  6. EasyUI动态生成菜单

    业务需求:不同角色有不同的权限,我们根据角色加载页面时展示不同的菜单.在easyUI中,菜单一般采用手风琴accordion组件进行展示,一级菜单下可以加载二级菜单,效果如下: 普通用户看到的菜: 管 ...

  7. WPF + RDLC + 动态生成列 + 表头合并

    如下,评论超过20条,马上发代码*(੭*ˊᵕˋ)੭*ଘ,效果如下: 代码逻辑简单. WPF使用RDLC需要使用如下DLL 新建WPF 窗体,黏贴下大概如下 <Window xmlns:rv=&q ...

  8. easyui datagrid 动态生成列

    for (var item_key in data) {//遍历json对象的每个key/value对,p为key var reg = /^score\d+/gi; for (var key in d ...

  9. easylui datagrid 动态生成列

    function load(sdate) { $.getJSON("workorder/statistics.do", { sdate : sdate+'-01' }, funct ...

随机推荐

  1. python+selenium自动化软件测试(第7章):Page Object模式

    什么是Page ObjectModel模式Page Objects是selenium的一种测试设计模式,主要将每个页面看作是一个class.class的内容主要包括属性和方法,属性不难理解,就是这个页 ...

  2. C++语法细节笔记

    1.数据类型转换 当赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数. 把负数转换成无符号数类似于直接给无符号数赋一个负值,结果等于这个负数加上无符号数后的模. ...

  3. Windows下mysql忘记root密码

    1. 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令: net stop mysql 打开第一个cmd窗口,切换到mysql的bin目录,运行命令: mysql ...

  4. mysql中group by 的用法解析

    1. group by的常规用法 group by的常规用法是配合聚合函数,利用分组信息进行统计,常见的是配合max等聚合函数筛选数据后分析,以及配合having进行筛选后过滤. 假设现有数据库表如下 ...

  5. 用python实现简单的数字信号软件滤波处理

    做嵌入式开发,经常需要通过逻辑分析仪对数字信号进行数据分析.如果信号源附近有强干扰源,并且逻辑分析仪滤波效果不好的话,获取到的数字信号,经常带有一些"毛刺",这些"毛刺& ...

  6. java开发3轮技术面+hr面 面经(MT)

    一直没打理博客园  发现博客园阅读量好大,就把前段时间写的一个面经也搬过来咯,大家一起加油.... 作者:小仇Eleven 链接:https://www.nowcoder.com/discuss/37 ...

  7. [Unity 设计模式]桥接模式(BridgePattern)

    1.前言 继上一讲IOC模式的基础上继续本讲桥接模式,笔者感觉桥接模式是23种设计模式中桥接模式是最好用但也是最难理解的设计模式之一,23中设计模式就好武侠剧中一本武功秘籍,我们在工作过程中想要熟练运 ...

  8. python 从视频中提取图片,并保存在硬盘上

    使用python的moviepy库来提取视频中的图片,按照视频每帧一个图片的方式来保存. extract images from video, than save them to disk from ...

  9. js实现换肤效果

    一,js换肤的基本原理 基本原理很简单,就是使用 JS 切换对应的 CSS 样式表文件.例如导航网站 Hao123 的右上方就有网页换肤功能.除了切换 CSS 样式表文件之外,通常的网页换肤还需要通过 ...

  10. HTML语言笔记

     html语言即超文本标记语言.         超文本标记语言,标准通用标记语言下的一个应用.         "超文本"就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元 ...