handsontable合并项mergeCells应用及扩展-程序员宅基地

技术标签: ViewUI  javascript  

由于我这个项目主要是配置多表头信息,主要使用了handsontabel合并项功能。

但是,在该功能使用过程中发现了一些问题和一些自己根据需要做的一些扩展


    $("#topFieldDiv").handsontable({
        data: data,
        colHeaders: colHeadArr,//设置列头
        manualRowResize: true,//自定义行宽
        manualColumnResize: true,//自定义列高
        manualColumnMove: true,//是否能拖动列
        //manualRowMove: false,//是否能拖动行
        columnSorting: false,//false/对象 //当值为true时,表示启用排序插件
        //rowHeaders: false,//是否显示行数字
        contextMenu: true,//右键显示更多功能,
        columns: cols,
        autoColumnSize: true,
        mergeCells: setmergeCells //加载合并项。变量名setmergeCells不能与mergeCells命名一样
    });
这里特别说明下:变量名setmergeCells不能与mergeCells命名一样。一开始变量名取为 mergeCells,没有加载出合并项 被坑了一下

一、获取合并项信息mergeCells.mergedCellInfoCollection

var $container = $("#topFieldDiv");
var handsontable = $container.data('handsontable');//获取当前handsontable

var data = handsontable.getData();//获取所有值
var mergeCellArr = handsontable.mergeCells.mergedCellInfoCollection;//获取合并项目

对handsontabel进行了一系列的合并操作之后,可以通过 xx.mergeCells.mergedCellInfoCollection获得合并项结果。

mergedCellInfoCollection为一个集合,格式如下:

[{"row":0,"col":0,"rowspan":1,"colspan":3},{"row":0,"col":3,"rowspan":1,"colspan":3},{"row":0,"col":6,"rowspan":1,"colspan":3}]
View Code

二、扩展方法 IsMergeMainCell(判断是否为合并单元格主项)

//判断是否为合并单元格主项
//i->行坐标
//j->列坐标
//mergeCellArr->合并项集合
function IsMergeMainCell(i, j, mergeCellArr) {
    var bool = false;

    if (mergeCellArr != null && mergeCellArr.length > 0) {
        for (var k = 0; k < mergeCellArr.length; k++) {
            var curMerCell = mergeCellArr[k];
            if (i == curMerCell.row && j == curMerCell.col) {
                bool = true;
                break;
            }
        }
    }
    return bool;
}
View Code

三、扩展方法 GetParentName (获取单元格的合并项父级的值)

//获取单元格的合并项父级的值
//i->行坐标
//j->列坐标
//mergeCellArr->合并项集合
//handsontable->
function GetParentName(i, j, mergeCellArr, handsontable) {
    var parentName = "";
    if (mergeCellArr != null && mergeCellArr.length > 0) {
        for (var k = 0; k < mergeCellArr.length; k++) {
            var curMerCell = mergeCellArr[k];
            if (curMerCell.row <= i && i <= (curMerCell.row + curMerCell.rowspan - 1) &&
                curMerCell.col <= j && j <= (curMerCell.col + curMerCell.colspan - 1)) {
                parentName = handsontable.getDataAtCell(curMerCell.row, curMerCell.col);
                break;
            }
        }
    }
    return parentName;
}
View Code

四、对表格经历了一番合并、行的删除之后,再次获得合并项集合时,会出现已删除的行合并项仍然存在,与实际合并项信息混杂一起难以区分。

对原生handsontabel的删除行(remove_row)方法做了修改:在每次删除行的同时,从合并项集合中清理掉属于该删除行的合并项。修改内容如下:

 

转载于:https://www.cnblogs.com/senyier/p/7298167.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34221773/article/details/93953101

智能推荐

编写一个函数,分别1*1+2*2+3*3+...+n*n的和 要求使用静态局部变量_使用函数的调用计算sum=1!+2!+3!+......+n!其中n!=1*2*3*....n;设置-程序员宅基地

文章浏览阅读1.8k次。#include<stdio.h>int dyh(int n){ int i; int sum=0; for(i=1;i<=n;i++) { sum=i*i+sum; printf("sum=%d\n",sum); }}int main(){ int n; scanf("%d",&n); dyh(n);}..._使用函数的调用计算sum=1!+2!+3!+......+n!其中n!=1*2*3*....n;设置一个计算阶乘

python 装饰器的分类_python装饰器种类-程序员宅基地

文章浏览阅读214次。python 装饰器分类_python装饰器种类

报错:此声明没有存储类或类型说明符-程序员宅基地

文章浏览阅读1.7w次,点赞12次,收藏22次。问题描述在学习案例的时候遇到一个知识点,顺手在源文件空白处编辑了一段,发现vs开始报错严重性说明错误(活动)此声明没有存储类或类型说明符在函数体外进行赋值的时候就会出现这个问题。比如out_type convert(const in_value& t) { //sample1 stringstream stream; stream << t; out_type result; stream >> result; return r_此声明没有存储类或类型说明符

人工智能讲师培训 AI 人工智能 650亿参数,训练飙升38%!LLaMA基础大模型复刻最佳实践开源,GitHub已获30k星-程序员宅基地

文章浏览阅读26次。百模大战」正风起云涌,AIGC相关企业融资和并购金额也屡创新高,全球科技企业争相入局。然而,AI大模型风光无限的背后是成本极其高昂,单次预训练成本或高达上千万元。基于LLaMA等现有开源大模型的微调,也难以满足企业打造核心竞争力和多样化商业使用等需求。因此,如何低成本量身打造预训练基础大模型,已成为AI大模型浪潮的关键瓶颈。

python数组自增_Python Numpy 自然数填充数组的实现-程序员宅基地

文章浏览阅读794次。今天学习Numpy时,想到了一个小问题。在Numpy中,随机生成array是比较容易的,用np.random.rand即可。如下a = np.random.rand(3,4)可得array([[ 0.05301444, 0.88175316, 0.01061948, 0.52498083],[ 0.51335312, 0.60080174, 0.66578974, 0.88035774],[ 0...._np.array创建连续自然数

【毕业设计】29-交流电机/步进电机的转速测量与控制系统设计(原理图、仿真、源代码、答辩论文、答辩PPT)_计算机控制系统步进电机转速控制实验系统框图-程序员宅基地

文章浏览阅读920次,点赞25次,收藏18次。本系统通过对交流步进电机研究。在系统的设计上首先根据系统设计要求规划系统功能,对系统的硬件电路设计软件程序编写,在硬件和软件上均采用模块化的方式实现系统的设计,保证在软件硬件上设计的稳定性强,可靠性高,抗干扰能力强。在系统设计上充分考虑了系统的性价比,系统选择使用51单片机作为主控芯片,L297为电机驱动芯片,L298N为交流步进电机控制芯片,LCD1602作为显示器,按键控制电机,设计了一个交流电机的转速测量与控制系统。_计算机控制系统步进电机转速控制实验系统框图

随便推点

实战:通过ViewModel规范TableView界面开发_tableviewdelegate view viewmodel-程序员宅基地

文章浏览阅读1k次。TableView界面可以说是移动App中最常用的界面之一了,物品/消息列表、详情编辑、属性设置……几乎每个app都可以看到它的身影。如何优美地实现一个TableView界面,就成了iOS开发者的必备技能。一般地,实现一个UITableView, 需要通过它的两套protocols,UITableViewDataSource和UITableViewDelegate,来指定页面内容并响应用户操作_tableviewdelegate view viewmodel

【Java】有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13 … 求出这个数列的前20项之和_java有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20-程序员宅基地

文章浏览阅读1.5w次,点赞12次,收藏34次。有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13 … 求出这个数列的前20项之和。要求:利用循环计算该数列的和。注意分子分母的变化规律。注意:a1=2, b1=1, c1=a1/b1;a2=a1+b1, b2=a1, c2=a2/b2;a3=a2+b2, b3=a2, c3=a3/b3;…s = c1+c2+…+c20;s即为分数..._java有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

使用Repeater中的OnItemCommand,OnItemDataBound_repeater onitemcommand使用-程序员宅基地

文章浏览阅读2.6k次。通过点击左边导航栏,调用事件使用Repeater中的OnItemCommand,OnItemDataBound客户端代码:

kafka+Kraft模式集群+安全认证_kafka raft 下的安全控制-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏6次。kafka+Kraft模式集群+安全认证_kafka raft 下的安全控制

源码安装OpenStack Ussuri -----准备篇_openstack源码编译安装-程序员宅基地

文章浏览阅读381次。源码安装OpenStack Ussuri -----准备篇本次我们将源码编译安装Openstack Ussuri版本 由于测试机器有限,使用的是控制计算在一个节点上的部署,在进行安装Openstack之前需要安装数据库,消息队列及缓存等服务,那么我们现在开始叭主机配置主机名称系统版本ens33ens34ControllerCentOS8.0192.168.175.128/24192.168.219.128/24关闭防火墙和Selinuxsystemctl _openstack源码编译安装

educoder指针应用之节日提示_节日提示c语言-程序员宅基地

文章浏览阅读812次。节日提示题目:任意输入英文的月份,在查找月份表后输出其对应的中文提示。缩写也可查找。#include <stdio.h>#include <string.h>#define MONTHS 12#define MAX_LEN 20 //字符串最大长度int FindWord(char mws[][MAX_LEN],int n,char x[]);int main(void){ int pos1,pos2; char x[_节日提示c语言

推荐文章

热门文章

相关标签