首页 > 解决方案 > 过滤后,获取当前显示在 Vaadin 14 Web 应用程序中的 Grid 小部件中的项目数

问题描述

GridVaadin 14 的小部件中,由 a 支持ListDataProvider,在通过诸如setFilteror之类的调用应用过滤器之后addFilter......</p>

➥ 如何检测数据提供者中有多少项目当前显示给用户?

我注意到了这个ListDataProvider::size方法。但是该方法需要 aQuery和 a SerializablePredicate。我的多个过滤器已成功应用,并且我Grid正在显示数据提供者项目的子集。所以我不想运行另一个查询。我想知道已经应用的过滤器的结果。

标签: countdatagridfilteringvaadinvaadin-flow

解决方案


传给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 filteredSizemethod toDataProviderListDataProvider#7539


推荐阅读