NatTable 在清除数据时保留行选择并重新加载

NatTable preserve row selection on clear data and reload

我使用下面的代码片段来清除 NatTable 数据并在刷新操作时完全重新加载。

natTable.getBodyDataProvider().getList().clear();
natTable.getBodyDataProvider().getList().addAll(inputList);
natTable.refresh();

由于数据已清除并重置,我无法在刷新前将行选择设置回先前选择的行。

但是,我正在使用 RowSelectionModel 成功地恢复排序选择

final RowSelectionModel<T> rowSelectionModel = new RowSelectionModel<T>(bodyLayer.getSelectionLayer(),bodyDataProvider, rowIdAccessor);
bodyLayer.getSelectionLayer().setSelectionModel(rowSelectionModel);

是否可以在数据清除和重新加载时恢复行选择?

我确实在 PreserveModel 上看到了现有问题:How to use Nebula NatTable's PreserveSelectionModel? 但它没有回答我的问题。

如果有人能就此提出更多建议,我们将不胜感激。

此致, 安全数据表

IIRC 当你清除底层列表时(我想你正在使用 GlazedLists,所以当你这样做时会触发一个事件),RowSelectionModel 清除内部存储的 selections。这是一致的,因为为已删除的 object 保留 selection 没有意义。

因此您需要实施解决该问题的解决方法。例如,可以实现自定义 ISelectionModel 来扩展 RowSelectionModel 并以不同的方式确保与基础列表的一致性。或者您在清除基础列表之前记住 selection,然后再次应用 selection。但是要做到这一点,您需要在 NatTable 上注册一个 PaintListener 以延迟应用 selection,否则内部事件将延迟清除 selection。

例如,以下代码段将始终 select NatTable body 区域中的第 5 行,这是 NatTable 中的第 6 行,因为第 header 行.

natTable.addPaintListener(new PaintListener() {

    @Override
    public void paintControl(PaintEvent e) {
        // use column 1 as column 0 in NatTable is the row header
        // insert the rows to select that you previously cached
        natTable.doCommand(
                new SelectRowsCommand(natTable, 1, 5, false, false));
    }
});