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

时间:2017-09-14 22:53:47

标签: eclipse-rcp nattable

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

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

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

但是,我成功使用RowSelectionModel来恢复Sort

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

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

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

感谢是否有人可以就此提供更多指示。

此致 SDS

1 个答案:

答案 0 :(得分:1)

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