【问题标题】:slickgrid get data from invisible selected rowsslickgrid 从不可见的选定行中获取数据
【发布时间】:2018-07-20 10:56:39
【问题描述】:

当过滤器应用于选定的行时,隐藏的选定行没有使用 getSelectedrows() 获取。它只返回可见的选定行。搜索了很多无法得到一个。需要可见和不可见的选定行的数据。

提前致谢!

【问题讨论】:

标签: slickgrid


【解决方案1】:

看这里: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 为真,它会保留选定的项目,即使它们不显示为行。例如,如果您选择一个项目,更改 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);
}

【讨论】:

  • 感谢您的回复...这个可行,但是,这不是我正在寻找的解决方案。事情是 syncgridselection 功能增加了两个参数检查 tat 如果有人需要 tat 我可以放在这里。您需要将 true 设置为 multiselect 以在隐藏时保留,另一个回调函数将返回 selectedIds。您可以做您需要的事情。当您尝试对隐藏的选定行执行操作时不要使用 onselectedrowschanged bcuz,回调在 onselectedrowschanged 之后起作用。谢谢...!
猜你喜欢
  • 2011-12-18
  • 2013-08-03
  • 1970-01-01
  • 2022-01-09
  • 2012-04-22
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多