需求:一个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. “无文件”恶意软件的威力:悄无声息一夜之间从ATM机中窃取80万美元

    去年雅虎接连曝出多个超大规模数据泄露事件,长期关注的你们一定都知道,5亿.10亿账户信息泄露的,除了雅虎也没谁了.就在这两天,5亿账户泄露的真相似乎正在浮出水面. 事件回顾 我们今天要讲的就是这桩5亿 ...

  2. Thinkjs学习1—概述及MVC的粗略理解

    1.概述 ThinkJS 是一款使用 ES6/7 特性全新开发的 Node.js MVC 框架,对于之前是纯前端的童鞋,可能不了解MVC框架是什么,不知道后台和前台怎么配合. 本教程以Thinkjs2 ...

  3. 一位资深程序员大牛给予Java提升技术的学习路线建议

    15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 ...

  4. [2012-08-06]awk多文件合并并按文件名分段

    以下代码满足这样的需求: 多个文件内容合并到一个文件A中(如果没有下面这条,使用cat就能解决) 文件A中每段内容之前保留原先的文件名 awk 'tmp!=FILENAME{tmp=FILENAME; ...

  5. 用PyCharm执行测试成功但无法生成HTMLTestRunner报告

    问题:代码写的没问题,执行也成功了,但就是无法生成HTMLTestRunner的报告 其实这是编辑器搞得鬼,编辑器为了方便用户执行测试,都有一项功能,可以用编辑器来调用unittest或者nose来执 ...

  6. ThinkPhp5源码剖析之Cache

    为什么需要Cache(缓存)? 假设现在有一个小说网,有非常多的读者,有一篇新的章节更新了,那么可能一分钟内有几万几十万的访问量. 如果没有缓存,同样的内容就要去数据库重复查询,那可能网站一下就挂掉了 ...

  7. Eclipse注释模板设置方法

    设置注释模板的入口:Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素 ...

  8. 一种解决url的get请求参数传值乱码问题的方式

    做项目的时候发现url get请求传中文字符出现乱码问题,百度了一下,最后用一种比较容易理解的方式解决了.分享给大家! 经过百度,网友提到:url get方式提交的参数编码,只支持iso8859-1编 ...

  9. JavaScript学习日志(二):面向对象的程序设计

    1,ECMAScript不像其他面向对象的语言那样有类的概念,它的对象与其他不同. 2,ECMAScript有两种属性:数据属性和访问器属性.([[]]这种双中括号表示属性为内部属性,外部不可直接访问 ...

  10. CCIE-MPLS VPN-实验手册(下卷)

    10:跨域的MPLS VPN (Option A) 10.1 实验拓扑 10.1 实验需求 a.       R1 R2 R3 组成P-NETWORK R1 R2 R3 位于AS 1,底层协议采用EI ...