需求

前几天遇到了这样一个需求,在页面上展示一组数据,但是表头不固定,需要动态加载出来。比如这次查询表头有【姓名】【年龄】,可能下次查询表头就变成了【姓名】【年龄】【性别】。

思路简介

我刚刚接手这个项目,前端技术用的是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的表头的更多相关文章

  1. .Net Mvc 返回Json,动态生成EasyUI Tree

    最近做一个项目,开始接触EasyUI,感觉很强大,很适合我这种对前台不是很感冒的人.在学习Tree的过程中,感觉网上的资料挺乱的,很多只是把EasyUI API 抄了一遍.现在把最近这段时间的学到的, ...

  2. 从数据库读取数据并动态生成easyui tree构结

    一. 数据库表结构 二.从后台读取数据库生成easyui tree结构的树 1.TreeNode树结点类(每个结点都包含easyui tree 的基本属性信息) import java.io.Seri ...

  3. PHP+Mysql+easyui点击左侧tree菜单对应表名右侧动态生成datagrid加载表单数据(二)

    关于tree菜单生成,参考我的另一篇博文地址tree 菜单 实现功能:点击左侧tree菜单中的table,右侧通过datagrid加载出该表对用的所有数据 难点:获取该表的所有列名,动态生成datag ...

  4. EasyUI中动态生成标签页

    这是最近学到的内容,当时是有思路但是不知道怎么获取当前的点击对象,就没有实现功能,通过更深入的学习,我知道了不仅仅是Java,Oracle中有一个this,同样的EasyUI中也存在一个this,来获 ...

  5. 基于DevExpress的BandedGridView动态生成多行(复合)表头

    最近cs项目中有个看板的功能需求,整个系统是基于DevExpress组件开发的,由于对这个组件的布局不是很熟,也借鉴了网上一些其他人的做法,普遍都是通过GridControl的BandedGridVi ...

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

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

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

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

  8. easyui动态生成列

    需求:一个id对应多个key value 将id作为标识列 key值作为表头 value作为值显示.数据表可分为两张表 param数据表: 下表一个id对应上表多个key及value 如下图 id_p ...

  9. easyui动态生成双列头

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

随机推荐

  1. SPN在域环境中的应用

    0X01 SPN    服务主体名称(SPN)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称.Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联.如果 ...

  2. java变量、数据类型、运算符

    关键字.保留字.标识符 关键字 Java关键字是对Java编译器有特殊含义的字符串,是编译器和程序员的一个约定,程序员利用关键字来告诉编译器其声明的变量类型.类.方法特性等信息 保留字 goto.co ...

  3. [转]论基于DSSA的软件架构设计与应用

    [摘要]   去年三月份,我所在的公司启动国网电力用户用电信息采集系统项目,我被任命为项目负责人.国网电力用户用电信息采集系统是国家电网公司坚强智能电网建设的一部分.由于公司之前为南网(主要是广东省) ...

  4. Object Destructuring Assignment vs Object.assign

    Object Destructuring Assignment vs Object.assign // const params = Object.assign({}, this.$route.par ...

  5. TypeScript TSConfig All In One

    TypeScript TSConfig All In One tsconfig.json https://www.typescriptlang.org/tsconfig https://www.typ ...

  6. Get your site working on Google Search Console , 在 Google Search Console中运行您的网站, Google Search Console

    1 1 https://support.google.com/webmasters/topic/4564315? Search Console Help SEARCH CONSOLEHELP FORU ...

  7. GraphQL All In One

    GraphQL All In One refs https://github.com/hasura/learn-graphql xgqfrms 2012-2020 www.cnblogs.com 发布 ...

  8. puppeteer render local HTML template bug

    puppeteer render local HTML template bug ➜ url-to-poster git:(master) ✗ dev ^-v-^ app is running in ...

  9. Github 获取仓库的releases API

    API 文档 example: 这将获取所有的版本 https://api.github.com/repos/januwA/flutter_anime_app/releases 最新版本: https ...

  10. DeFi里的灰度?每月获得高收益?BGV代币初探

    2020年已经接近了尾声,但是DeFi市场的热闹场面并没有停止,或者说,一直在延续.资本市场不断将大批的资金投入到DeFi市场中,以求在这波热潮中赚得一波又一波红利. 美国时间12月21日,Bacca ...