具有组级别选择的 SlickGrid 多级分组
Posted
技术标签:
【中文标题】具有组级别选择的 SlickGrid 多级分组【英文标题】:SlickGrid multi-level grouping with group level selection 【发布时间】:2020-05-20 11:55:27 【问题描述】:我已经实现了一个带有自定义选择模型的光滑网格以及一个自定义复选框选择插件。 我还添加了组级别复选框以允许在顶层切换选择。 我的要求之一是折叠的分组仍然可以通过任何父级分组复选框进行选择。
我的绊脚石似乎是我不知道如何选择当前在组中不可见的行。光滑的网格维护一组可视选定的项目,而网格数据视图维护完整的选定项目集,无论是否可见。但是,当单击折叠行的组复选框时,我不知道如何通过管道输入数据。
我正在像这样配置我的网格:
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);
gist to custom plugins, too long to include here
具体来说,如果您查看slick.checkboxselectionmodel
的57
行:
$.each(dataItem.rows, function(index, groupRow)
var groupRowIndex = _self._grid.getData().getRowById(groupRow.id);
if (groupRowIndex)
selection.push(groupRowIndex);
);
groupRowIndex 永远不会为隐藏行解析,因此永远不会被选中。我尝试在单击时展开组,然后解析行,这可行,但是当组随后折叠时,在网格中选择了错误的行。
任何帮助将不胜感激!
一些注意事项:
如果我选择一行并折叠其组,该项目将保留其选择 there is a different branch of the slick grid which has an equally non-functional implementation of group selection【问题讨论】:
我会尽快提供丰厚的赏金 有一个打开的issue #165 用于此,我认为有帮助的是您或其他任何人只需在 6pac 前叉中提供对该问题的修复。这是一个由社区贡献的开源项目,因此多年来任何贡献都有助于使这个库变得更好。 【参考方案1】:gist to updated plugins
我相信一个功能性解决方案可以让任何寻求类似行为的人走上正确的道路,但是,我不确定这些插件中的任何一个独立工作的效果如何。我的要求之一是只允许通过行复选框进行行选择。
一个问题(我确信很容易改进)是组级别复选框仍然需要在您的组格式运算符中定义
我的问题的主要解决方案是在进行组级选择/取消选择时展开所有折叠的组,执行任何选择/取消选择例程,然后折叠任何以前展开的组
编辑:
当网格有大量数据(10k 行)时,这会失败。 以赏金重新开放。
看起来必须扩展和折叠这么多组会导致性能下降。
【讨论】:
@AmerllicA 这个答案为时过早,不适用于大型数据集 @AmerllicA 取悦这样的赏金不仅是不道德的,而且实际上 OP 在发布此答案后开始了赏金,那是因为 OP 没有得到他想要的结果与此答案.所以,如果你有时间想出一个更好/更好的解决方案,请不要再像这样乞求你没有获得的赏金,而是试着帮助 OP 解决他的问题。 @ChristosLytras,我会立即删除我的评论,谢谢提示。 @ChristosLytras 也有同样的想法,不能说得更好以上是关于具有组级别选择的 SlickGrid 多级分组的主要内容,如果未能解决你的问题,请参考以下文章
XSLT / Muenchian 分组:如何从组中选择具有某些子元素的元素?
数据库:如果任何行中的字段 X 具有值 Y,则排除“分组依据”组