count - 过滤后,获取当前显示在 Vaadin 14 Web 应用程序中的 Grid 小部件中的项目数
问题描述
在Grid
Vaadin 14 的小部件中,由 a 支持ListDataProvider
,在通过诸如setFilter
or之类的调用应用过滤器之后addFilter
......</p>
➥ 如何检测数据提供者中有多少项目当前显示给用户?
我注意到了这个ListDataProvider::size
方法。但是该方法需要 aQuery
和 a SerializablePredicate
。我的多个过滤器已成功应用,并且我Grid
正在显示数据提供者项目的子集。所以我不想运行另一个查询。我想知道已经应用的过滤器的结果。
解决方案
传给new Query<>( myDataProvider.getFilter() )
_ListDataProvider::size
ListDataProvider
有方法size(Query<T, SerializablePredicate<T>> query)
。
因为 dataprovider 只保留原始项目列表,所以size
没有参数的简单方法将无法按您的意愿工作。您可以使用数据提供者的当前过滤器构建所需的查询。
我测试了以下代码,它可以工作:
// my own method, defined as value change listeners of any filter field
private void onFilterChange(){
ListDataProvider<Foo> dataProvider = (ListDataProvider<Foo>) grid.getDataProvider();
dataProvider.setFilter((item) -> {......}
// everytime after resetting the filter, check how many items now are displayed
int filteredSize = dataProvider.size(new Query<>(dataProvider.getFilter()));
int fullSize = dataProvider.getItems().size(); // this is how you get the size of all items
Notification.show(String.format("Now showing %d of %d items", filteredSize, fullSize));
}
也许将来这项工作可能会更容易一些:请参阅 feature-request ticket Add filteredSize
method toDataProvider
或ListDataProvider
#7539。
推荐阅读
- sql - 如何每行获得一个结果?我已经尝试过 DISTINCT 但它不起作用
- eclipse - 成功执行单元测试后增加 SonarQube 中的代码覆盖率
- python - 如何使用枚举键访问和打印类的成员?
- qt - 如何将 QtQuick.Controls 2.xx 与 QtGraphicalEffects 一起使用
- java - 执行程序后 CMD 中显示的 JNI 错误是什么?
- c# - 保持传输线高(编辑实际上需要 TX 线低和 RX 线高)
- firebase - 安排 Firebase 云函数在每小时开始时每 30 分钟运行一次,然后在 30 分钟后运行
- excel - 如何将权重分配给低于目标的高分
- javascript - 从 setInterval 调用的函数内部更新全局变量
- python - 组合多个值和排序