Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Vaadin 8网格中重新应用过滤器_Vaadin_Vaadin8_Vaadin Grid - Fatal编程技术网

如何在Vaadin 8网格中重新应用过滤器

如何在Vaadin 8网格中重新应用过滤器,vaadin,vaadin8,vaadin-grid,Vaadin,Vaadin8,Vaadin Grid,我已将过滤器添加到我的网格中,如下所示: filterTextField.addValueChangeListener(event -> { myListDataProvider.addFilter( columnName, value-> value.toLowerCase().contain(filterTextField.getValue())); }); 这将设置并应用过滤器。但是,稍

我已将过滤器添加到我的网格中,如下所示:

filterTextField.addValueChangeListener(event -> {
        myListDataProvider.addFilter(
                columnName, 
                value-> value.toLowerCase().contain(filterTextField.getValue()));
    });
这将设置并应用过滤器。但是,稍后我会在网格上执行一项操作,这需要重新加载项目,以便:

grid.setItems(reloadItemsDueToAction());

当我这样做时,
filterTextField
当然仍然会被填充,网格也会被重新加载,但是问题是我不知道如何重新应用在
ListDataProvider
中设置的过滤器,以便根据
filterTextField
再次过滤网格。过滤器仍应在ListDataProvider中设置,但如何在网格中应用它们?

在我看来,目前(8.1.5)只能通过再次设置DataProvider和过滤器来实现,例如:

private ListDataProvider<Entity> ldp
   = new ListDataProvider<>(getGridItems()); // initial grid data

// then somewhere update grid & re-apply filters

SerializablePredicate<Entity> filter = ldp.getFilter(); // store filter
ldp = new ListDataProvider<>( getGridItems() ); // new ldp with fresh data
grid.setDataProvider(ldp); // instead of setItems()
if(filter!=null) ldp.addFilter(filter); // re-apply stored filter

使用多个过滤器对两者进行测试。

在网格上创建文本字段作为过滤器,在映射中保留值,覆盖hasValue,在将数据提取到网格后添加

通常,您可以调用触发
DataChangeEvent
,网格接收并更新UI。您的数据如何更改为需要调用
grid.setItems(…)
?调用refreshAll()不起作用。例如,根据操作的细节,数据从一个数据库表传输到另一个数据库表,在这种情况下,只需重新加载网格就更容易了。问题是,当我重新加载网格时,过滤器在文本字段中仍然可见,但不再应用于网格。您是否使用数据提供程序从数据库或其他地方检索数据?我觉得如果你能提供一个
ListDataProvider<Entity> ldp = ((ListDataProvider<Entity>)g.getDataProvider());
SerializablePredicate<Entity> filter = ldp.getFilter();
grid.setItems(getGridItems());
ldp = ((ListDataProvider<Entity>)g.getDataProvider());
if(filter!=null) ldp.addFilter(filter);