可以隐藏SlickGrid列而不将其从“columns”数组中删除?

时间:2011-06-16 14:13:50

标签: javascript slickgrid

我想要隐藏一个列(它是每行唯一的ID列),但是我无法将其从“columns”数组中删除,因为当在Row上执行操作时,我需要在Row中使用该数据(选择,排序等)。

例如,在排序之后,我需要抓住Rows将它们与以前的样式相匹配,然后我可以使用ID列执行此操作。我需要行中的数据,我只是不希望它显示。

感谢。

8 个答案:

答案 0 :(得分:13)

答案是否定的,但这不是您正在寻找的答案:)

除了用于获取数据的列之外,它们与您的数据项之间没有硬链接。您无需在列中显示您的数据项上的ID。

答案 1 :(得分:7)

如果有人还在寻找这个,我找到了一种方法......它不是很优雅,但确实有效。正如Simon建议的那样,将Id列添加为网格中的最后一列。将cssClass和headerCssClass都设置为“display:none!important”,并将width,minWidth和maxWidth列选项设置为0,如下所示:

var columns = [
    { id: "MyColumnId", name: "My Column", field: "MyColumnData", width: 100},
    { id: "Id", name: "Id", field: "Id", width: 0, minWidth: 0, maxWidth: 0, cssClass: "reallyHidden", headerCssClass: "reallyHidden" }
];

和css是:

.reallyHidden {display:none!important;}

希望有所帮助。

答案 2 :(得分:1)

无法将解决方法设置为宽度/ maxWidth为1,将名称设置为空字符串,并将列放在所有其他列的最右侧。像这样(例如在coffeescript中,如果您对语法使用http://js2coffee.org/感到不确定):

columns = [

          ... some columns ...

            {
               id:"hidden"
               name:""
               field:"id"
               sortable:"true"
               width: 1
               maxWidth: 1
               minWidth: 1
               unselectable: true
               formatter: (row,cell,val,columnDef,dataContext) ->
                  "<div style='display: none;'>#{val}</div>"
            }
         ]

答案 3 :(得分:0)

对于这类问题,我使用了两个数组。一个用于显示,另一个用于columnPicker。这是怎么回事,

var org_columns = [],hid_columns = [];
org_columns.push(
cb_selector.getColumnDefinition(),
{id: "id", name: "ID", field: "id", sortable: true, width: 56},
{id: "name", name: "Name", field: "name", editor: Slick.Editors.Text, sortable: true, width: 234},
{id: "email", name: "Email", field: "email", editor: Slick.Editors.Text, sortable: true, width: 234}
);

hid_columns.push(
cb_selector.getColumnDefinition(),
{id: "name", name: "Name", field: "name", editor: Slick.Editors.Text, sortable: true, width: 234},
{id: "email", name: "Email", field: "email", editor: Slick.Editors.Text, sortable: true, width: 234}
);
var data_view = new Slick.Data.DataView();
grid = new Slick.Grid("#grid", data_view, hid_columns, grid_options);
var columnPicker= new Slick.Controls.ColumnPicker(org_columns, grid,grid_options);

答案 4 :(得分:0)

coloumns.push中的

({id:id,name:name,Hidden:true}) // hidden确保在绑定网格时删除列

答案 5 :(得分:0)

我意识到这是一个老问题,但正确的方法是使用dataProvider并利用getItemMetaData提供您不一定要显示的信息。

当您选择行时,您可以调用grid.getItemMetaData(cell.row)来获取所需的额外信息。 getItemMetaData应返回描述行和单元级metaData的jsonObject。

以下是描述它的文档。

https://github.com/mleibman/SlickGrid/wiki/Providing-data-to-the-grid

答案 6 :(得分:0)

在找到有关此问题的一些答案之后,我找到了一种解决方法,该解决方法确实可以隐藏列并仍然保存数据。

最初的问题是我需要隐藏网格的ID列,因此基本上我通过创建具有name属性的唯一列来隐藏ID列,而未指定其他任何内容,然后创建了我期望的列。

答案 7 :(得分:0)

我今天遇到了同样的问题,并且我正在处理纯数组数据。如果将值添加到数据数组的末尾,但未在columns-array中定义它们,则该数据存在并且可以在事件中使用它,但未显示。

示例:

new Slick.Grid({
    document.getElementById('grid')
    , [
        [1, 2, 3, 1]
        , [1, 2, 3, 2]
        , [1, 2, 3, 3]
        , [1, 2, 3, 4]
        , [1, 2, 3, 5]
    ]
    , headers: [
        {
            field: '0'
            , id: 'foo'
            , name: 'foo'
        }
        , {
            field: '1'
            , id: 'bar'
            , name: 'bar'
        }
        , {
            field: '0'
            , id: 'baz'
            , name: 'baz'
        }
    ]
    , {}
);

您可以在代码中看到,我为网格提供了第4个值,没有列定义。