我有一个运行有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();
以下是有关行为的屏幕截图:
展开前:
展开后的预期行为:
展开后的实际行为:
我很确定我已经接近了,但是我不太清楚自己在做什么错。
在此先感谢您抽出宝贵的时间来帮助我:)
编辑:我可能已经找到了一些东西。我正在使用syncGridSelection
来设置一些事件,但稍后会覆盖它们。我覆盖的事件是
dataView.onRowCountChanged()
dataView.onRowsChanged()
grid.onSelectedRowsChanged
这可能是这里的问题吗?我需要这些事件才能使折叠/展开功能正常工作。 grid.onSelectedRowsChanged
用于将所选项目传递到图表,因此也是必需的。
编辑2: 我能够重现示例5的问题,可以找到经过修改的代码in this paste 重现步骤: 1.选择项目10 2.折叠项目7
答案 0 :(得分:0)
看过代码后,我认为实际上正在工作。只是您的CSS更改掩盖了一点。
有 selected 行和 active 行。这些是不同的东西。您已经将两者的CSS设置为相同(在页面本身的CSS区域中)。因此,实际上已将其删除时,该选择似乎仍然存在,但是该行现在处于活动状态。
只需删除这两个CSS规则并看看。
要获得加分,请使用:
dataView.syncGridSelection(grid, true);
,当选择在折叠/展开时移入和移出视线时,网格将保留选择。