NatTable 保留对清晰数据的行选择并重新加载



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

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

由于数据被清除并重置,因此我无法在刷新之前将行选择设置回以前选择的行。

但是,我成功地使用行选择模型来恢复排序上的选择

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

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

我确实在PreserveModel上看到了现有的问题:如何使用Nebula NatTable的PreserveSelectionModel?但它没有回答我的问题。

如果有人能就此提供更多指示,请不胜感激。

问候 安全数据表(SDS)

IIRC 当您清除底层列表时(我假设您正在使用 GlazedLists,因此当您这样做时会触发一个事件),RowSelectionModel会清除内部存储的选择。这是一致的,因为为已删除的对象保留选择是没有意义的。

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

例如,以下代码片段将始终选择 NatTable 正文区域中的第 5 行,由于列标题行,这是 NatTable 中的第 6 行。

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));
}
});

最新更新