当前位置: 首页 > news >正文

JqGrid纵向合并单元格

在项目开发中,前端页面经常会遇到一些表格数据需要合并单元格的操作,尤其是各类统计报表,下面我就介绍一种单元格纵向合并的方法:

举个栗子:

姓名

工作时间

工作内容

张三

2019-01-01

工作1

张三

2019-01-01

工作2

张三

2019-01-02

工作3

1、如果想要合并完的效果只是姓名相同的就把姓名合并,即如下效果:

姓名

工作时间

工作内容

 

张三

2019-01-01

工作1

2019-01-01

工作2

2019-01-02

工作3

首先要在表格加载数据的方法里面,将要合并的列的属性加入合并单元格方法

cellattr: function(rowId, tv, rawObject, cm, rdata){

  //合并单元格

       return 'id=\'Name' + rowId + "\'"

}

下面是加载表格的JS完整方法:

$("#gridTable").jqGrid({

            url: "@Url.Content("请求数据的接口"),

            datatype: "json",

            autowidth: true,

            colModel: [

                {

                    label: '姓名', name: 'Name', index: 'Name', width: 80, align: 'center', sortable: true,

                    cellattr: function (rowId, tv, rawObject, cm, rdata) {

                        //合并单元格

                        return 'id=\'Name' + rowId + "\'";

                    }

                },

                {label: '工作时间', name: 'Time', index: 'Time ', width: 80, align: 'center', sortable: true},

                { label: '工作内容', name: 'TaskName', index: ' TaskName', width: 80, align: 'center', sortable: true },

            ],

    gridComplete: function () {

                //合并单元格

                Merger(“gridName”, 'Name');

            }

            });

}

 

//合并单元格

function Merger(gridName, CellName) {

//得到显示到界面的id集合

        var showIds = $("#" + gridName + "").getDataIDs();

        //当前显示多少条

        var length = showIds.length;

        for (var i = 0; i < length; i++) {

            //从上到下获取一条信息

            var before = $("#" + gridName + "").jqGrid('getRowData', showIds[i]);

            //定义合并行数

            var rowSpanTaxCount = 1;

            for (j = i + 1; j <= length; j++) {

            //和上边的信息对比 如果值一样就合并行数+1 然后设置rowspan 让当前单元格隐藏

                var end = $("#" + gridName + "").jqGrid('getRowData', showIds[j]);

                if (before[CellName] == end[CellName]) {

                    rowSpanTaxCount++;

                    $("#" + gridName + "").setCell(showIds[j], CellName, '', { display: 'none' });

                } else {

                    rowSpanTaxCount = 1;

                    break;

                }

                $("#" + CellName + "" + showIds[i] + "").attr("rowspan", rowSpanTaxCount);

            }

        }

    }

2、如果你想要的效果是姓名一样,但是工作时间也一样才合并姓名的话,即效果为:

姓名

工作时间

工作内容

张三

2019-01-01

工作1

2019-01-01

工作2

张三

2019-01-02

工作3

 

那么表格加载完的gridComplet方法调用的Merger方法就要传入表格名、Name列名、Time列名了:

gridComplete: function () {

                //合并单元格

                Merger(“gridName”, 'Name', 'Time');

            }

            });

Merger方法中的条件判断中需要加入一个条件:before[CellName1] == end[CellName1]:

function Merger(gridName, CellName,CellName1) {

            …

            for (j = i + 1; j <= length; j++) {

                …

                if (before[CellName] == end[CellName] && before[CellName1] == end[CellName1]) {

                   …

                } else {

                 …

                }

            …

        }

    }

通过以上例子,可以与一反三,根据自己的需要对单元格进行合并操作。

注意事项:Jqgrid中的合并单元格操作一定是在从后台查出来的数据已经是按照你想要合并的列进行过排序的才行,要不然就会出现格式混乱的问题。比如上面例子中的Name,一定是相同名字的行是紧挨着的。

 

转载于:https://www.cnblogs.com/t140603/p/10926441.html

相关文章:

  • 线程池之ThreadPoolExecutor线程池源码分析笔记
  • Azure DevOps Server (TFS) 修改工作项附件大小限制
  • 二十三、NFS企业级优化
  • [百度百科]PCI-E的速度
  • AI numpy
  • zabbix 3.4 安装记录
  • 【原】常用shell命令
  • centos7下yum和python重装
  • 关于layui的日期和时间组件laydate闪屏的坑
  • 第七次作业
  • kubernetes(k8s)架构及核心概念
  • DELL R740/720 使用U盘安装Centos7
  • ReentrantReadWriteLock读写锁
  • jmeter(五十一)_性能测试中的服务器资源监控与分析
  • 联想 A5(L18011) 免解锁BL 免rec Magisk Xposed ROOT 救砖 ZUI 3.9.068
  • (三)从jvm层面了解线程的启动和停止
  • 345-反转字符串中的元音字母
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • css属性的继承、初识值、计算值、当前值、应用值
  • extract-text-webpack-plugin用法
  • mysql 5.6 原生Online DDL解析
  • Python爬虫--- 1.3 BS4库的解析器
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • vue的全局变量和全局拦截请求器
  • 从零开始学习部署
  • ------- 计算机网络基础
  • 解析带emoji和链接的聊天系统消息
  • 力扣(LeetCode)357
  • 如何利用MongoDB打造TOP榜小程序
  • 数据科学 第 3 章 11 字符串处理
  • 写代码的正确姿势
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 阿里云ACE认证学习知识点梳理
  • 第二十章:异步和文件I/O.(二十三)
  • 通过调用文摘列表API获取文摘
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #if 1...#endif
  • #Linux(权限管理)
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (007)XHTML文档之标题——h1~h6
  • (2)nginx 安装、启停
  • (2)STM32单片机上位机
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (四)图像的%2线性拉伸
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • *** 2003
  • .bat批处理(一):@echo off
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈