我正在尝试从网格中获取要导出的所有项。检索到的列表应该遵循所有应用的过滤器和排序。我用的是 ListDataProvider
如果有关系的话。
建议的解决方案包括:
使用 ListDataProvider.getItems()
或者 grid.getDataProvider().fetch(new Query<>()).collect(Collectors.toList())
(此处)
使用 grid.getDataCommunicator().fetchItemsWithRange(0,grid.getDataCommunicator().getDataProviderSize())
(这里和这里)
使用 grid.getDataCommunicator().fetchFromProvider(..)
(此处)
缺点:
未对项目进行排序/筛选。
vaadin 8溶液,vaadin 13中不存在的方法。
提供的方法受保护,因此无法调用。
如何通过应用过滤器和排序从网格中实际获取所有项目?
2条答案
按热度按时间dtcbnfnu1#
既然你投了
grid.getDataProvider
到ListDataProvider<Type>
,您可以从listdataprovider获取用于获取查询的当前筛选器。但仅对查询使用筛选器将忽略排序顺序。要考虑到所有这些信息,您需要同时使用来自dataprovider(过滤信息)和datacommunicator(排序信息)的信息
编辑:你在回答中说,这感觉“黑客”。我明白你的意思,但这是办法。我认为这种行为可以作为网格本身的公共api提供:
List<Type> list = grid.getCurrentItems();
. 然后网格会在内部执行此操作,这样您就不会看到“hacky”部分了。我确信他们知道当dataprovider不是ListDataProvider
. 您可以在github repo中为此打开一个功能请求lskq00tm2#
我找到了一个对我有用的解决办法。这不服从过滤,但排序,这是目前足以为我的情况。这看起来很有意思:
我在这里看到的主要问题是
所有项目必须在(
getItems().size()
)获取实际查询的范围。这个
getFilter()
方法DataCommunicator
是protected
无法调用和检索筛选器(因此null
(=此处不使用过滤器)。