最近开发的过程中碰到一个客户提出的需求,一个指定的页面导出需要提供一个弹出页面选择列表页面需要显示的列,页面确认之后需要修改列表页面显示的表格,导出的数据也需要同步变化。

总结一下可以称为一个列表数据的动态显示和动态导出

表格应用的是Easyui datagrid插件,项目以MVC5位背景开发

下面直接上代码

1.首先设置列表页面需要显示的列columus为全局对象,用于子页面调用,这里的columns 对象在构建datagrid列表的时候决定了显示列的相应属性。

  1. field 对应后台返回数据对象名称,
  1. title 对应列表数据显示的名称
  1. width 数据列显示的宽度
  1. align 数据在表格中显示方式,center 居中 left 居左, right 居右
  1. var columns = [
  2. [
  3. { field: "HouseNo", title: "房屋编号", width: 80, align: "center" },
  4. { field: "HouseDoorplate", title: "现房屋门牌", width: 80, align: "center" },
  5. { field: "RentRange", title: "租赁范围", width: 80, align: "center" },
  6. { field: "ContractNo", title: "合同编号", width: 80, align: "center" },
  7. { field: "Name", title: "承租人", width: 80, align: "center" },
  8. { field: "HouseManageName", title: "工作站名称", width: 80, align: "center" },
  9. { field: "HousekeepName", title: "房管员", width: 80, align: "center" },
  10. { field: "PropertyName", title: "产权属性", width: 80, align: "center" },
  11. { field: "BaseRent", title: "租金基数", width: 80, align: "center" },
  12. { field: "CreditCardName", title: "减免情况", width: 80, align: "center" },
  13. { field: "ReduceMoney", title: "减免金额", width: 80, align: "center" },
  14. { field: "CollectMoney", title: "应收租金", width: 80, align: "center" },
  15. { field: "BuildArea", title: "建筑面积", width: 80, align: "center" },
  16. { field: "MetRentArea", title: "计租面积", width: 80, align: "center" },
  17. { field: "ContactNumber", title: "联系电话", width: 80, align: "center" },
  18. { field: "UsePropertyName", title: "使用性质", width: 80, align: "center" },
  19. { field: "TotalFloors", title: "总层数", width: 80, align: "center" },
  20. { field: "CompletYear", title: "建成年份", width: 80, align: "center" },
  21. { field: "BuildStructureName", title: "建筑结构", width: 80, align: "center" },
  22. { field: "IsTaoName", title: "是否成套住宅", width: 80, align: "center" }
  23. ]
  24. ];

2.datagrid表格页面初始化,里面的每一个属性的详细意义就不一一介绍了,需要了解可以查找easyui  datagrid表格相关文档

主要调用了loader方法回调success,通过Ajax请求后台数据,返回解析成对应datagrid所需要的格式数据在绑定到表格上面。

  1. var StatisticalRentReport = {
  2. Initialize: function (columns) {
  3. $("#StatisticalRentReportDataGrid").datagrid({
  4. columns: columns,
  5. checkOnSelect: true,
  6. height: '500',
  7. idField: "id",
  8. striped: true,
  9. singleSelect: true,
  10. fitColumns: false,
  11. fit: false,
  12. loadMsg: false,
  13. nowrap: false,
  14. rownumbers: true, //行号
  15. pagination: true, //分页控件
  16. pageSize: 10,
  17. pageList: [10, 50, 100, 500, 1000, 2000, 10000],
  18. showFooter: true,
  19. onLoadSuccess: function (data) {
  20. $(this).datagrid('doCellTip', { 'max-width': '400px', 'delay': 500 });
  21. $(this).datagrid("clearSelections").datagrid("clearChecked");
  22. },
  23. loader: function (param, success, error) {
  24. $.ajax({
  25. type: "POST",
  26. url: "/Home/GetData",
  27. contentType: "application/json",
  28. data: null
  29. }).done(function (data) {
  30. if (data) {
  31. success(data);
  32. } else {
  33. error();
  34. }
  35. }).fail(function () {
  36.  
  37. });
  38. }
  39. });
  40. },
  41. };
  42. $(function() {
  43. StatisticalRentReport.Initialize(columns);
  44. })

3.弹出列属性设置页面,这里会遍历所有表格数据,传递名称用于列隐藏显示匹配,通过遍历columns对应,然后用拼字符串的形式传递到字段设置字段属性页面

这里的Column参数在列熟悉设置页面初始化显示列熟悉的时候回应用到!

  1. //导入房屋完损状况
  2. ColumnProperties: function () {
  3. var html = "";
  4. for (var i = 0; i < columns[0].length; i++) {
  5. if (columns[0][i].hidden !== true) {
  6. html += columns[0][i].title + ",";
  7. }
  8. }
  9. dialog = ezg.modalDialog({
  10. width: 650,
  11. height: 370,
  12. title: '房屋查询报表列属性设置',
  13. url: '/Report/ColumnProperties?Column=' + html
  14. });
  15. },

4.初始化列属性选中状态,获取父页面传递过来的Column字符串,然后获取弹出页面需要选中的checkbox,设置当前显示的列为选中状态,这里主要的作用是在于可能之前选择过一次需要显示的列,如果再次设置需要显示的列,如果不初始化这些列,就会导致操作繁琐的一个过程。topevery.getQuery这个方法是在base.js里面封装的一个方法,主要是获取Url传递的参数对象。

  1. $(function () {
  2. var columnId = topevery.getQuery('Column');
  3. var columns1 = columnId.split(',');
  4. var obj = $("input[name='column']");
  5. for (var i = 0; i < obj.length; i++) {
  6. for (var j = 0; j < columns1.length; j++) {
  7. if (obj[i].value === columns1[j]) {
  8. $(obj[i]).attr('checked', 'checked');///初始化显示列表已经显示的列数据为选择
  9. }
  10. }
  11. }
  12. })

5.保存需要显示的列数据,设置未勾选的列的hidden 属性为false,然后通过parent调用父页面的构建表格函数重新构建表格。这里的代码思路请查看代码注释。在这里有一个重要的初始化方法,需要把所有列的hidden设置为false,然后在把需要隐藏的列熟悉设置为true,不然会造成第一次设置为隐藏,在第二次及以后设置中改列的hidden属性一直为true。parent用于获取父页面的元素属性。

  1. var ColumnProperties= {
  2. Save: function () {
  3. var obj = $("input[name='column']:checked");
  4. var columns = parent.columns[0].concat();//深copy一个对象用于遍历保存需要隐藏的列数据
  5. var columns1 = parent.columns[0].concat();//深copy一个对象用于遍历保存需要显示的列数据
  6. for (var i = 0; i < obj.length; i++) {
  7. for (var j = 0; j < columns.length; j++) {
  8. if (obj[i].value === columns[j].title) {
  9. columns.splice(j, 1);//删除需要显示的列数据
  10. }
  11. }
  12. }
  13. for (var k = 0; k < columns1.length; k++) {
  14. columns1[k].hidden = false;//初始化所有列数据为显示,如果不初始化,隐藏掉的列就无法再显示了
  15. }
  16. for (var f = 0; f < columns1.length; f++) {
  17. for (var h = 0; h < columns.length; h++) {
  18. if (columns1[f].title === columns[h].title) {
  19. columns1[f].hidden = true;//设置需要隐藏列的hidden属性为true
  20. }
  21. }
  22. }
  23. var object = new Array();
  24. object[0] = columns1;
  25. parent.StatisticalRentReport.Initialize(object);//重新构造datagrid表格
  26. parent.dialog.dialog('close');//关闭弹出框口
  27. }
  28. }

6.导出数据设置需要导出的列,通过columns对应的hidden属性,如果为true则是不需要导出的列,反之则是需要导出的列,Column参数主要的作用在后台需要设置到处哪些列的时候体现出来。

  1. RentExp: function () {
  2. var html = "";
  3. for (var i = 0; i < columns[0].length; i++) {
  4. if (columns[0][i].hidden !== true) {
  5. html += columns[0][i].title + ",";
  6. }
  7. }
  8. window.location.href = "/Report/StatisticalRentReportExpAsync?Column=" + html;
  9. }

总结:大致的功能效果实现的差不多了,但是存在非常频繁的for循环,导致整个的代码可读性可能差了那么一点。如果有更好的建议,欢迎大家提出,进行修改!

这里主要提供了这样的一个思路,其实在很多的code的时候,很多的前辈都教导我们,拿到需求先不要急着去写代码,认真的读几遍需求,反复的思考在去动手,往往都能够快速的解决问题。

其实关于这篇文章有个很惨的事情,这已经是修改了第三次了,之前都因为文字介绍太少没有审核通过,当时很气的一点是明明是技术型的文章,如果针对的有需要帮助的人,应该能够很轻松的就能够理解,后面想了想也还是没有想通!what?

具体效果请查看Demo实例

Dome链接http://pan.baidu.com/s/1o87GEpG  提取码 i8tr

Easyui设置动态表格,动态导出数据实例,附Demo的更多相关文章

  1. Easyui设置动态表格,动态导出数据实例,附Dome

    最近碰到一个需求,需要提供一个弹出页面选择列表页面需要显示的列,页面确认之后需要修改列表页面显示的表格,导出的数据也需要同步变化. 下面直接上代码 1.设置需要显示的列columus为全局对象,用于子 ...

  2. jQuery的下面是动态表格动态表单中的HTML代码

    动态表格动态表单中的Jquery代码 <script type="text/javascript" src="/include/jquery/jquery-1.1. ...

  3. POI操作Excel(批量导出数据/下载excel)

    目录 1.第一个demo:创建工作簿,创建sheet页,创建单元格    2.创建一个时间格式的单元格    3.遍历工作簿的行和列并获取单元格内容    4.文本提取    5.单元格对齐方式    ...

  4. Java实现PDF和Excel生成和数据动态插入以及导出

    一.序言 Excel.PDF的导出.导入是我们工作中经常遇到的一个问题,刚好今天公司业务遇到了这个问题,顺便记个笔记以防下次遇到相同的问题而束手无策. 公司有这么两个需求: 需求一.给了一个表单,让把 ...

  5. jquery表格动态增删改及取数据绑定数据完整方案

    一 前言 上一篇Jquery遮罩插件,想罩哪就罩哪! 结尾的预告终于来了. 近期参与了一个针对内部员工个人信息收集的系统,其中有一个需求是在填写各个相关信息时,需要能动态的增加行当时公司有自己的解决方 ...

  6. 基于layui,Jquery 表格动态编辑 设置 编辑值为 int 或者 double 类型及默认值

    首先先推荐大家在看这篇笔记时,阅读过我写的这篇 Layui表格编辑[不依赖Layui的动态table加载] 阅读过上面那篇笔记之后呢,才能更好的理解我现在所要说的这个东西 接下来废话不多说,上代码. ...

  7. 在页面上绘制一张表格,使用 DOM 节点的动态添加和删除向表格中插入数据,点击表格每行后的“删除”超链接

    查看本章节 查看作业目录 需求说明: 在页面上绘制一张表格,使用 DOM 节点的动态添加和删除向表格中插入数据,点击表格每行后的"删除"超链接,使用 DOM 节点的删除操作将对应的 ...

  8. easyui datagrid 可过滤行的数据表格 导出

    //过滤栏表格导出数据                  /* xukf                 * id datagrid id                 * url Action 路 ...

  9. 数据的动态合并和导出至EXCEL

    最近一段时间都在处理数据的动态合并和导出EXCEL的问题,写个demo记录下,希望和我碰到同样问题的博友可以顺利解决:后面会提供demo下载链接. (VS2012,ASP.NET) 一.主要解决以下问 ...

随机推荐

  1. 自己编写jQuery动态引入js文件插件 (jquery.import.dynamic.script)

    这个插件主要是结合jquery或者xhr异步请求来使用的,它可以把已经引入过的js文件记录在浏览器内存中,当下次再引入相同的文件就忽略该文件的引入. 此插件不支持浏览器刷新保存数据,那需要利用cook ...

  2. Day3-函数及作用域

    一.函数定义:一组代码片段用函数名封装起来,通过函数名的方式调用执行. 特性: 1.减少重复代码 2.使程序易扩展 3.使程序易维护 语法定义: def sayhi(): print("he ...

  3. 开发一个Servlet示例

    Servlet响应请求步骤: Servlet是一个基于Java技术的Web组件,运行在服务器端,用户利用Servlet可以很轻松地扩展Web服务器的功能,使其满足特定的应用需要.Tomcat是一个常用 ...

  4. 搞定python多线程和多进程

    1 概念梳理: 1.1 线程 1.1.1 什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发 ...

  5. 关于在Mac OS下安装npm与cnpm的ERR! Darwin 15.0.0解决办法

    mac os安装好了很久了,不过没怎么用,昨天想要体验一下大神们推荐的黑苹果系统用起来怎么样(关于安装黑苹果的可以到我的简书去看相关文章),于是乎,打开久违的vmware,看着咬一口的苹果进度图,心中 ...

  6. Spring+SpringMVc+Mybatis实现数据库查询

    大家好,本篇博客小Y将会给大家带来一篇SSM框架实现数据查询的Demo,使用的数据库是Mysql,Server是TomCat.现在的SSM整合非常流行,因为springmvc的高效和mybatis的灵 ...

  7. sql备份文件兼容性问题

    第一步: 右键需要备份的数据库,选择"属性"

  8. 【web前端开发】浏览器兼容性处理

    1.居中问题div里的内容,IE默认为居中,而FF默认为左对齐,可以尝试增加代码margin: 0 auto;2.高度问题两上下排列或嵌套的div,上面的div设置高度(height),如果div里的 ...

  9. docker dead but pid file exists 问题

    You may have to enable the public_ol6_latest repo in order to get this package. sudo yum-config-mana ...

  10. es6之各种数据类型的扩展

    一. 字符串的扩展 为字符串添加了Iterator,可以被for...of遍历 includes.startsWith.endsWith都会返回布尔值,且支持第二个参数(开始搜索的位置),endsWi ...