在选定的行上应用过滤器时,隐藏的选定行不会使用getSelectedrows()获得,它仅返回可见的选定行。搜索的很多行都无法获得一个。需要选定行的可见和不可见数据。 / p>
谢谢。!
答案 0 :(得分:0)
看这里:https://github.com/6pac/SlickGrid/wiki/DataView#synchronizing-selection--cell-css-styles
报价:
关于DataView的最常见问题之一是如何在DataView更改上同步选择或单元CSS样式状态。假设用户选择了一行。如果他们随后更改了DataView上的筛选器以隐藏一些项目,则网格将调用一次以使所有更改的行(包括选定的行)无效,但它不知道在那里显示的项目已移至其他位置。我们需要做的是存储所选项目的ID,并在修改DataView时随时在网格上更新所选内容。
幸运的是,DataView上有一个辅助方法可以解决这个问题:
syncGridSelection(grid, preserveHidden)
-通过订阅网格的onSelectedRowsChanged事件以及DataView的onRowsChanged和onRowCountChanged事件,将网格的选定行与DataView同步。如果preserveHidden为true,则即使它们在行中不可见,它也会保留选定的项。例如,如果选择一个项目,则更改DataView过滤器,以使该项目不再显示在网格中,然后再将其更改回,该项目将保持选中状态。如果preserveHidden为false,则将删除所有无法映射到行的选定项。
实现过程非常简单,我将在此处提供它作为参考:
function syncGridSelection(grid, preserveHidden) {
var self = this;
var selectedRowIds = self.mapRowsToIds(grid.getSelectedRows());;
var inHandler;
function update() {
if (selectedRowIds.length > 0) {
inHandler = true;
var selectedRows = self.mapIdsToRows(selectedRowIds);
if (!preserveHidden) {
selectedRowIds = self.mapRowsToIds(selectedRows);
}
grid.setSelectedRows(selectedRows);
inHandler = false;
}
}
grid.onSelectedRowsChanged.subscribe(function(e, args) {
if (inHandler) { return; }
selectedRowIds = self.mapRowsToIds(grid.getSelectedRows());
});
this.onRowsChanged.subscribe(update);
this.onRowCountChanged.subscribe(update);
}