【问题标题】:NatTable preserve row selection on clear data and reloadNatTable 保留清除数据的行选择并重新加载
【发布时间】:2018-02-24 01:00:42
【问题描述】:

我使用下面的 sn-p 来清除 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? 但它没有回答我的问题。

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

问候, 安全数据表

【问题讨论】:

    标签: eclipse-rcp nattable


    【解决方案1】:

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

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

    例如下面的 sn-p 将始终选择 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));
        }
    });
    

    【讨论】:

    • 感谢 Dirk 的快速回复。我正在缓存选择对象,并在清除和重新加载时使用 rowSelectionProviderNatTable.setSelection(new StructuredSelection(previousSelectedObj));这不会将选择设置回表。既然 NatTable 已经有了 Paintlistener,我可以使用 DefaultPaintListner 吗?
    • 不明白这个问题。为什么不能再添加一个 PaintListener?
    • 我是 NatTable 和 SWT PaintListener 的新手。感谢您是否可以共享代码 sn-p 来设置行选择。谢谢。
    • 效果很好!非常感谢您的回答。我正在使用 int rowIndex = ((IRowDataProvider)bodyDataProvider).indexOfRowObject(selectedObj); 获取 rowPosition int rowPosition = selectionLayer.getRowPositionByIndex(rowIndex); natTable.doCommand(new SelectRowsCommand(natTable, 1, rowPosition, false, false));
    猜你喜欢
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 2013-10-30
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多