【问题标题】:slickgrid select rows while filter is on forgets previous selectionsslickgrid 在过滤器打开时选择行会忘记以前的选择
【发布时间】:2012-08-31 14:14:18
【问题描述】:

我有一个很大的列表,我在其中实施了过滤。我希望用户能够选择一些行,过滤列表,选择更多,更改过滤器,选择更多,并保留所有选择。

我正在关注这个例子: http://mleibman.github.com/SlickGrid/examples/example4-model.html

按照以下步骤查看我的问题:

  1. 点击第0行
  2. 按住 Shift 并单击第 10 行。现在选择第 0 到第 10 行。
  3. 将滑块向上移动大约 90%,因此仅显示 0 - 10 行中的几行。 (对我来说,2、6 和 8 仍然显示并且仍然被选中。)
  4. 按住 Ctrl 键单击未选择的行(对我来说,第 29 行)
  5. 将过滤器滑回零位。

现在看到了这个问题。对我来说,只选择了第 2、6、8 和 29 行。我希望 0 到 10 和 29 保持选中状态。有没有获得这种行为的选项?如果没有,有人可以推荐一种可能有效的方法吗?

【问题讨论】:

    标签: slickgrid


    【解决方案1】:

    这个问题已经在Github解决了。

    • 首先,添加一个变量来存储 id。
      • var selectedIds=[];
    • 二、修改syncGridSelection
      • DataView.syncGridSelection(grid, true, true, function(syncIds) { selectedIds = syncIds;});

    【讨论】:

      【解决方案2】:

      诀窍是:

      1. 为每个选定的行保存一些指示
      2. 在构建过滤数据时,请注意在数组中选择了哪些行
      3. 在“setGridData”之后调用“setSelectedRows”

      这是执行此操作的代码。

      // filter grid without harming selection
      // grid: a SlickGrid Object
      // filter: a function that receieves a "data row" and returns true if it meets the filter
      function filterGrid(grid,filter) {
          var oldline;
          var olddata=grid.getData();
          var oldselection=grid.getSelectedRows()
      
          var newline=0;
          var newdata=[];
          var newselection=[];
      
          for (oldline=0; oldline<olddata.length ; oldline++ ) {
            if (filter(olddata[oldline]) {
              newdata.push(olddata[oldline]);
              if (oldselection.indexOf(oldline)>-1) { // note on condition: ECMA5 - in IE8 you will need to loop
                newselection.push(newline);
                newline++;
              }
            }
          }
      
          grid.setData(newdata);
          grid.setSelectedRows(newselection);
          grid.updateRowCount();
          grid.render();      
      }
      

      请注意,此代码不会保留未通过过滤器的选定行。

      【讨论】:

      • 不知道。我会考虑在我的项目中升级 slickgrid。
      • idbehold,如果您想将该链接作为答案发布,我会将其标记为正确。如果没有,我会自己回答,以便这个问题至少有答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 2020-06-30
      • 1970-01-01
      • 2019-11-30
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多