Handsontable:隐藏一些列而不更改数据数组/对象

2023-12-19

我有一个数据要在网格中显示。我正在使用 Handsontable 来显示数据。每个第三列都计算为前两列的差值(例如,第三列渲染为第一列和第二列的总和;这是由自定义渲染器通过取总和来完成的i-1 and i-2列)。

这是我的“差异”列的自定义渲染器:

var val1 = instance.getDataAtCell(row, col - 1),
    val2 = instance.getDataAtCell(row, col - 2),
    args = arguments;
        args[5] = val2 - val1;
        if (args[5] !== 0) {
            $(td).addClass('grid-column-class-nonzero');
        }
        Handsontable.renderers.NumericRenderer.apply(this, args);

我需要一个“开关”。此开关将显示/隐藏列。如果开关打开,那么我需要显示所有列。如果开关关闭,我只需要显示包含差异的列。 那么,您能否建议 - 如何隐藏 hansontable 中的列?

EDIT:我已经按照@ZekeDroid 的建议更新了我的代码。

 // on 'switch click' I modify colsToHide global array and do table re-render
 $('#my-id').handsontable('render');

这是我的自定义渲染器,用于应根据开关隐藏/显示的列:

var colsToHide = [];
var classModel1Renderer = function (instance, td, row, col, prop, value, cellProperties) {
    "use strict";
    if (colsToHide.indexOf(col) > -1) {
        td.hidden = true;
    } else {
        td.hidden = false;
    }

    Handsontable.renderers.TextRenderer.apply(this, arguments);
    $(td).addClass('grid-column-class-model1');
};

此代码确实隐藏/显示列,但它不适用于标题列。


您可以使用 colWidths 将特定列的宽度减少到 0.1 像素。从技术上讲,它仍然是表的一部分,并且 .getData() 返回列的数据,但对于人眼来说它是不可见的。如果您获得的列太多,以至于 0.1 像素的列堆积起来可见,您仍然可以在逗号后面添加更多的零以再次减少列:)

handsontable.updateSettings({
    colWidths: [0.1,0.1,50],
});

此示例将“隐藏”前两列并以 50 像素显示第三列。

附言。为了隐藏第一列,我建议宽度为 1px,这样第二列的列边框就不会看起来不完整

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Handsontable:隐藏一些列而不更改数据数组/对象 的相关文章