我使用以下代码段清除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
答案 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));
}
});