SlickGrid 多级分组与组级选择

Jul*_*ien 10 javascript jquery slickgrid typescript

当前电网状态

我已经实现了一个带有自定义选择模型和自定义复选框选择插件的光滑网格。我还添加了组级别复选框以允许在顶层切换选择。我的要求之一是仍然可以通过任何父级分组复选框选择折叠分组。

我的绊脚石似乎是我不知道如何选择当前在组中不可见的行。光滑的网格维护可视化选择的项目集,而网格数据视图维护完整的选定项目集,无论可见与否。但是,当单击折叠行的组复选框时,我无法弄清楚如何通过管道输入数据。

我正在像这样配置我的网格:

let checkboxSelectionModel = new Slick.CheckboxSelectionModel();
this.grid.setSelectionModel(checkboxSelectionModel);

this.grid.registerPlugin(new Slick.Data.GroupItemMetadataProvider());

let onSelectedRowIdsChanged = this.dataProvider.syncGridSelection(this.grid, true, true);

onSelectedRowIdsChanged.subscribe(
  function(e: any, args: any)
    {
      //business logic stuff                    
    }
  );

let groupedCheckboxSelector = new Slick.GroupedCheckboxSelectColumn({
  cssClass: "slick-cell-checkboxsel",
  onSelectedRowIdsChangedHandler: onSelectedRowIdsChanged
});

let columns = this.grid.getColumns();
columns.unshift(groupedCheckboxSelector.getColumnDefinition());
this.grid.setColumns(columns);

this.grid.registerPlugin(groupedCheckboxSelector);
Run Code Online (Sandbox Code Playgroud)

要点要自定义插件,太长时间,包括在这里 特别是,如果你看看行57slick.checkboxselectionmodel

$.each(dataItem.rows, function(index, groupRow) {
  var groupRowIndex = _self._grid.getData().getRowById(groupRow.id);
    if (groupRowIndex) {
      selection.push(groupRowIndex);
    }
});
Run Code Online (Sandbox Code Playgroud)

groupRowIndex 永远不会为隐藏行解析,因此永远不会被选中。我试图在单击时展开组,然后解析行,这是可行的,但是当组随后折叠时,在网格中选择了错误的行。

任何帮助将不胜感激!

一些注意事项:

Jul*_*ien 1

更新插件的要点

我相信一个功能性的解决方案可以让任何寻求类似行为的人走上正确的道路,但是,我不确定这些插件独立工作的效果如何。我的要求之一是只允许通过行复选框进行行选择。

一个问题(我确信很容易改进)是组级别复选框仍然需要在组格式运算符中定义

我的问题的主要解决方案是在进行组级选择/取消选择时展开所有折叠的组,执行任何选择/取消选择例程,然后折叠任何先前展开的组

编辑:

当网格具有大量数据(10k 行)时,此操作会失败。重新开放有赏金。

看起来必须扩展和折叠如此多的组对性能造成的影响会导致问题。