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 ...
随机推荐
- 关于CSS属性clip在手机浏览器端的兼容性问题
由于自己的6坏了拿去修了所以这两天使用了同事一只山寨安卓机和自己早年的小4,在今天的页面测试中,对于img中进行clip操作在这两台机子中均不能实现,后借用同事的6发现clip能正常展现,其中安卓版本 ...
- 最大流dinic模板
循环版,点的编号从0开始: ; ; const int INF = 0x3f3f3f3f; struct Edge { int to, next, cap, flow; }edge[MAXM]; in ...
- Openfire分析之三:ConnectionManager 连接管理(1)
Openfire是怎么实现连接请求的? XMPPServer.start()方法,完成Openfire的启动.但是,XMPPServer.start()方法中,并没有提及如何监听端口,那么Openfi ...
- python在windows和linux环境的进程对比
1.fork进程:(1)在windows系统中不可以用fork来创建进程,linux可以,但是创建大量进程使用很不方便. 2.Process进程: import multiprocessing as ...
- thinkjs 文件上传
采用thinkjs框架写前后端 let formdata = new FormData($('form')[0]); $('#fileUpload').submit(function (e) { e. ...
- 网络唤醒全攻略(Wake On Lan)
家里组了台服务器存放资料,或者作为开发服务器,远程登陆成为刚性需求,由于机器需要的时候才用到,所以如果经常开机的话很费电,按需开机是最佳办法:网上教程很多,但是比较杂乱,表达累赘:还是自己总结一篇简单 ...
- 配置IIS使用Python
打开IIS管理器 选择功能视图,然后选择ISAPI和CGI限制 打开后,在右侧操作,点击添加,会出现下图所示 按图中提示填写相应部分,在选择路径时,默认可能是dll文件,改成全部文件即可,然后再选择p ...
- MongoDB对应SQL语句
-------------------MongoDB对应SQL语句------------------- 1.Create and Alter 1. sql: crea ...
- copy和mutableCopy都是浅拷贝!!!------你被骗了很多年
所有系统容器类的copy或mutableCopy方法,都是浅拷贝!!! (ps:什么是容器?比如NSArray,NSMutableArray,NSDictionary,NSMutableDiction ...
- mysql 返回自增id
String dateNow= DateTime.Now.ToString("yyyyMMddhhmmss"+ new Random().Next(1, 99)); //随机数 ...