【问题标题】:How to re-apply filters in Vaadin 8 Grid如何在 Vaadin 8 Grid 中重新应用过滤器
【发布时间】:2017-10-21 01:06:35
【问题描述】:

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

filterTextField.addValueChangeListener(event -> {
        myListDataProvider.addFilter(
                columnName, 
                value-> value.toLowerCase().contain(filterTextField.getValue()));
    });

这会设置并应用过滤器。但是后来我在网格上执行了一个操作,需要重新加载项目,这样:

grid.setItems(reloadItemsDueToAction());

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

【问题讨论】:

  • 通常你可以调用dataProvider.refreshAll()触发DataChangeEvent,网格接收它并更新UI。您的数据如何更改以需要致电 grid.setItems(...)
  • 调用 refreshAll() 不起作用。一个示例操作是根据操作的详细信息将数据从一个数据库表传输到另一个数据库表的操作,在这种情况下,只需重新加载网格就更容易了。问题是当我重新加载网格时,过滤器在 TextField 中仍然可见,但不再应用于网格。
  • 您是在使用数据提供程序从数据库中检索数据还是其他方式?我觉得如果你能提供一个sscce 会更容易

标签: vaadin vaadin8 vaadin-grid


【解决方案1】:

在我看来,目前(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

Table/Container 也采用了同样的方式。

如果您使用setItems(),我猜Grid 不再使用以前的DataProvider,并且将过滤器设置为以前的DataProvider 将不会传播到Grid。我不知道这是否明智,但如果你真的需要使用setItems(),那么可能是这样的:

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);

用多个过滤器测试。

【讨论】:

    【解决方案2】:

    在网格上创建TextField作为过滤器,保留map中的值,覆盖hasValue,在获取数据到网格后添加

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 2017-07-17
      • 2019-04-30
      • 2017-08-22
      • 1970-01-01
      • 2020-09-02
      • 1970-01-01
      相关资源
      最近更新 更多