slickgrid从不可见的选定行中获取数据

时间:2018-07-20 10:56:39

标签: slickgrid

在选定的行上应用过滤器时,隐藏的选定行不会使用getSelectedrows()获得,它仅返回可见的选定行。搜索的很多行都无法获得一个。需要选定行的可见和不可见数据。 / p>

谢谢。!

1 个答案:

答案 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);
}