表格更改时,SlickGrid DataView syncGridSelection不会删除旧选择

时间:2019-01-08 09:09:17

标签: javascript slickgrid

我有一个运行有dataView的SlickGrid,并且我在使用rowSelectionModel和选项multiSelect=false。当我在网格中选择某项,然后通过单击一个按钮以显示一些隐藏行来扩展网格时,该选择正确地移动了,但是旧选择仍然保留在旧行中。

这是我到目前为止所拥有的:

var dataView = new Slick.Data.DataView({inlineFilters: false});
var grid = new Slick.Grid(gridDiv, dataView, columns, options);
grid.setSelectionModel(new Slick.RowSelectionModel({selectActiveRow: true}));
grid.setSelectedRows([]); //make sure the selection is empty
dataView.onRowsChanged.subscribe(function (e, args) {
    grid.invalidate();
});
dataView.beginUpdate();
dataView.setItems(data);
dataView.setFilter(displayFilter);
dataView.endUpdate();
dataView.syncGridSelection(grid);
grid.render();

以下是有关行为的屏幕截图:

展开前:

screenshot of table before expanding

展开后的预期行为:

screenshot of expected behavior after expanding

展开后的实际行为:

screenshot of actual behavior after expanding

我很确定我已经接近了,但是我不太清楚自己在做什么错。

在此先感谢您抽出宝贵的时间来帮助我:)

编辑:我可能已经找到了一些东西。我正在使用syncGridSelection来设置一些事件,但稍后会覆盖它们。我覆盖的事件是 dataView.onRowCountChanged() dataView.onRowsChanged() grid.onSelectedRowsChanged

这可能是这里的问题吗?我需要这些事件才能使折叠/展开功能正常工作。 grid.onSelectedRowsChanged用于将所选项目传递到图表,因此也是必需的。

编辑2: 我能够重现示例5的问题,可以找到经过修改的代码in this paste 重现步骤: 1.选择项目10 2.折叠项目7

1 个答案:

答案 0 :(得分:0)

看过代码后,我认为实际上正在工作。只是您的CSS更改掩盖了一点。

selected 行和 active 行。这些是不同的东西。您已经将两者的CSS设置为相同(在页面本身的CSS区域中)。因此,实际上已将其删除时,该选择似乎仍然存在,但是该行现在处于活动状态。

只需删除这两个CSS规则并看看。

要获得加分,请使用:

dataView.syncGridSelection(grid, true);

,当选择在折叠/展开时移入和移出视线时,网格将保留选择。