easyui动态生成列
需求:一个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动态生成列的更多相关文章
- EasyUI 动态生成列加分页
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...
- jQuery EasyUI中DataGird动态生成列的方法
EasyUI中使用DataGird显示数据列表中,有时需要根据需要显示不同的列,例如,在权限管理中,不同的用户登录后只能查看自己权限范围内的列表字段,这就需要DataGird动态组合列,下面介绍Eas ...
- easyui动态生成双列头
实习时老大交给任务,让我做这样一个效果,选择日期并点击查询时,动态生成列头,下一列要求对应日期的星期. 效果图: 下面贴出查询的单击函数: //查询按钮 function queryByDate(){ ...
- WPF Datagrid 动态生成列 并绑定数据
原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用 可 ...
- EasyUI datagrid动态生成列
任务描述:根据用户选择时间段,生成列数据,如图
- EasyUI动态生成菜单
业务需求:不同角色有不同的权限,我们根据角色加载页面时展示不同的菜单.在easyUI中,菜单一般采用手风琴accordion组件进行展示,一级菜单下可以加载二级菜单,效果如下: 普通用户看到的菜: 管 ...
- WPF + RDLC + 动态生成列 + 表头合并
如下,评论超过20条,马上发代码*(੭*ˊᵕˋ)੭*ଘ,效果如下: 代码逻辑简单. WPF使用RDLC需要使用如下DLL 新建WPF 窗体,黏贴下大概如下 <Window xmlns:rv=&q ...
- easyui datagrid 动态生成列
for (var item_key in data) {//遍历json对象的每个key/value对,p为key var reg = /^score\d+/gi; for (var key in d ...
- easylui datagrid 动态生成列
function load(sdate) { $.getJSON("workorder/statistics.do", { sdate : sdate+'-01' }, funct ...
随机推荐
- HTML5无插件多媒体Media——音频audio与视频video
文件日志地址 http://blog.csdn.net/q1056843325/article/details/60336226 音频与视频现在已经变得越来越流行 各个网站为了保证跨浏览器的兼容性 ...
- 《Java从入门到放弃》JavaSE入门篇:面向对象概念(入门版)
要知道什么是面向对象,你首先要有个对象吧,所以······没有对象的可以回家洗洗睡了· 好吧,前面是开玩笑,要说明什么是面向对象,我们还是先 例子: 小呆:"小傻,你今天早餐吃的什么?&qu ...
- 匿名委托与Lambda表达式
通过使用匿名委托(匿名方法),使编程变得更加灵活,有关委托与匿名委托请参考我的前一篇Blog<委托与匿名委托>. 继续之前示例,代码如下: static void Main(string[ ...
- log4j源码解析
前言:本文将在slf4j的基础上解释log4j的应用,阅读本文前可先行阅读SLF4J源码解析-LoggerFactory(二) 前言概要 在前言中提到的slf4j的基础,其主要是通过logback的a ...
- HTML5_input_file_打开很慢的问题
最近项目中有上传附件的功能,只是在chrome浏览器上面测试,发现上传附件,打开选择框比较慢 原文链接:http://www.foreverpx.cn
- C# yield return用法
本文实例讲述了C#中yield return用法,并且对比了使用yield return与不使用yield return的情况,以便读者更好的进行理解.具体如下: yield关键字用于遍历循环中,yi ...
- MPLS VPN随堂笔记2
深入理解ospf 理解MPLS VPN 中对OSPF 层次化设计的补充 supper backbone area 2:理解MPLS VPN 中OSPF 的区域设计概念 3:理解MPLS VPN 中OS ...
- 201521123084 《Java程序设计》第2周学习总结
第2周作业-Java基本语法与类库 1. 本周学习总结 1.学会使用码云管理代码: 2.学会使用Eclipse关联jdk源代码,并查看对象的源代码: 3.学会String类和StringBuilder ...
- 201521123097 《JAVA程序设计》第七周学习总结
1. 本周学习总结 总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码: public boolean contains(Object ...
- 201521123038 《Java程序设计》 第六周学习总结
201521123038 <Java程序设计> 第六周学习总结 1. 本周学习总结 2. 书面作业 1.clone方法 1.1 Object对象中的 clone 方法是被protected ...