如何动态生成EasyUI的表头
需求
前几天遇到了这样一个需求,在页面上展示一组数据,但是表头不固定,需要动态加载出来。比如这次查询表头有【姓名】【年龄】,可能下次查询表头就变成了【姓名】【年龄】【性别】。
思路简介
我刚刚接手这个项目,前端技术用的是EasyUI,不大熟悉。翻看了一下前人的代码,表头都是写死的。在网上查了一下,形形色色的答案,但是思路大致是统一的,无非就是把datagrid的columns拼出来,只是在前端拼还是在后端拼的问题。
我觉得还是在前端拼比较好,看起来没有那么乱。大概就是说后端封装一个对象包含比如title、filed、width等属性,然后将这个对象的数组返回给前端。前端通过JS遍历这个数组,拼接出需要的数据结构,赋值给columns。
但是我没有用这种方式,因为我是一个后端选手,还是用后端代码写起来更得心应手些。
后端的写法最初我是定义了一个 TableHeader 对象,把前端需要的字段封装起来,然后前端,直接将接收到的数组赋值到 columns,不需要再进行其他处理。
public class TableHeader{
String title;
String filed;
int width;
}
这种写法有一个问题,就是当我需要为数据添加 formatter 函数进行数据处理的时候,我需要的是 formatter : function(value,row,index){...} 这种数据格式,但是json解析出来给我加上了双引号 “formatter”:“function(value,row,index){...}“。我不知道怎么去掉这个双引号,所以选择的另外一种简单粗暴的方式,拼接字符串。
代码展示
后端提供数据的方法:
public String getTableHeaders(Object param) {
StringBuilder sb = new StringBuilder();
sb.append("[");
List<String> columns = baseDao.getDynamicColumns(param);
if (columns.isEmpty()) {
sb.append("]");
} else {
for (String column : columns) {
String str = String.format("{field:\"%s\", title:\"%s\", width:%d, align:\"right\"},",column,column, 150);
sb.append(str);
}
sb.replace(sb.length() - 1, sb.length(), "]");
} return sb.toString();
}
如果需要添加formatter或者rowstyler函数,直接在字符串里拼就行了。不大好看,但是绝对好使。
前端调取数据的方法:
var columns = [[]];
$.ajax({
type: "post",
async: false, // 这里要注意设置为false, 表头要先于数据加载
data: param,
dataType: "json",
traditional: true, //这里设置为true
url: ctx + "/report/" + headerUri + "/tableheaders",
success: function (ret) {
columns = [eval(ret)]; // 这里要注意使用 eval() 方法解析字符串
}});
$('#list').datagrid({
url:'xxxxx',
queryParams:xxxx,
rownumbers: true,
columns: columns
})
其实只要思路搞清楚,实现起来并不复杂。
easyUI 是一个有点老但是十分简单的框架,文档也很清晰,在使用它的时候不妨多看看文档,有时候比在网上搜来搜去更有效。比如动态显隐行,一个rowStyler就能解决的问题,网上好多人搞得很复杂,甚至有说easyUI不支持的,很是误导人。
rowStyler: function (index, row) {
if (row.indicator == '1') {
return 'display:none';
}else{
return 'background-color: yellow;';
}
}
}
前人的经验,不可不信,不可尽信。
如何动态生成EasyUI的表头的更多相关文章
- .Net Mvc 返回Json,动态生成EasyUI Tree
最近做一个项目,开始接触EasyUI,感觉很强大,很适合我这种对前台不是很感冒的人.在学习Tree的过程中,感觉网上的资料挺乱的,很多只是把EasyUI API 抄了一遍.现在把最近这段时间的学到的, ...
- 从数据库读取数据并动态生成easyui tree构结
一. 数据库表结构 二.从后台读取数据库生成easyui tree结构的树 1.TreeNode树结点类(每个结点都包含easyui tree 的基本属性信息) import java.io.Seri ...
- PHP+Mysql+easyui点击左侧tree菜单对应表名右侧动态生成datagrid加载表单数据(二)
关于tree菜单生成,参考我的另一篇博文地址tree 菜单 实现功能:点击左侧tree菜单中的table,右侧通过datagrid加载出该表对用的所有数据 难点:获取该表的所有列名,动态生成datag ...
- EasyUI中动态生成标签页
这是最近学到的内容,当时是有思路但是不知道怎么获取当前的点击对象,就没有实现功能,通过更深入的学习,我知道了不仅仅是Java,Oracle中有一个this,同样的EasyUI中也存在一个this,来获 ...
- 基于DevExpress的BandedGridView动态生成多行(复合)表头
最近cs项目中有个看板的功能需求,整个系统是基于DevExpress组件开发的,由于对这个组件的布局不是很熟,也借鉴了网上一些其他人的做法,普遍都是通过GridControl的BandedGridVi ...
- jQuery EasyUI中DataGird动态生成列的方法
EasyUI中使用DataGird显示数据列表中,有时需要根据需要显示不同的列,例如,在权限管理中,不同的用户登录后只能查看自己权限范围内的列表字段,这就需要DataGird动态组合列,下面介绍Eas ...
- WPF + RDLC + 动态生成列 + 表头合并
如下,评论超过20条,马上发代码*(੭*ˊᵕˋ)੭*ଘ,效果如下: 代码逻辑简单. WPF使用RDLC需要使用如下DLL 新建WPF 窗体,黏贴下大概如下 <Window xmlns:rv=&q ...
- easyui动态生成列
需求:一个id对应多个key value 将id作为标识列 key值作为表头 value作为值显示.数据表可分为两张表 param数据表: 下表一个id对应上表多个key及value 如下图 id_p ...
- easyui动态生成双列头
实习时老大交给任务,让我做这样一个效果,选择日期并点击查询时,动态生成列头,下一列要求对应日期的星期. 效果图: 下面贴出查询的单击函数: //查询按钮 function queryByDate(){ ...
随机推荐
- 翻译:《实用的Python编程》01_04_Strings
目录 | 上一节 (1.3 数字) | 下一节 (1.5 列表) 1.4 字符串 本节介绍处理文本的方法. 表示字面量文本 在程序中字符串字面量使用引号来书写. # 单引号(Single quote) ...
- online QRcode generator , QRcode=== (Quick Response Code) , 二维条码,二维码,彩色二维码,图片二维码,
online QRcode generator , QRcode=== (Quick Response Code) , 二维条码,二维码,彩色二维码,图片二维码, 1 http://cli.i ...
- learning-js-by-reading-source-codes
learning-js-by-reading-source-codes BigInt https://github.com/learning-js-by-reading-source-codes/lo ...
- SameSite cookies explained
SameSite cookies explained
- js & while & do while
js & while & do while https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Stat ...
- JavaScript Best Practice
JavaScript Best Practice Clean, maintainable, execute code
- ts 修改readonly参数
readonly name = "xxx"; updateValueAndValidity(): void { // this.name = 'a'; (this as { nam ...
- (转载)VoLTE简介
转载地址:http://www.360doc.cn/article/2909773_637471256.html,本文介绍了移动通信领域相关概念,如CS.PS.VoIP.VoLTE.IMS.CSFB. ...
- (转)IP协议详解之子网寻址、子网掩码、构造超网
原文网址:http://www.cnblogs.com/way_testlife/archive/2010/10/05/1844399.html 子网寻址 1. 从两级IP地址到三级IP地址 < ...
- JDBC 连接Oracle数据库 各个对象的理解
JDBC: 1. **代码实现:(连接oracle数据库) 1.导入驱动jar包 2.注册驱动 Class.forName("oracle.jdbc.driv ...