简体   繁体   English

如何默认过滤Vaadin网格

[英]How to filter Vaadin grid as default

Hi I'm trying to write a grid filter in Vaadin framework. 嗨,我正在尝试在Vaadin框架中编写网格过滤器。 My aim is that a user has a combo box with dropdown list and can choose that he wants to see only entries from 3, 6, 9 weeks ago. 我的目标是使用户拥有一个带有下拉列表的组合框,并且可以选择仅查看3、6、9周前的条目。 I wrote it but I have a problem becasue it doesnt work as default filter. 我写了它,但是我有一个问题,因为它不能作为默认过滤器。 I mean if I open a page the grid is displayed without filter. 我的意思是,如果我打开一个页面,则显示的网格将不带过滤器。 I need first click on the button. 我需要先单击按钮。 Is it possible to filter grid by default, showing only 3 weeks entries? 默认情况下是否可以过滤网格,仅显示3周的条目? How can I manage it? 我该如何管理?

     final ComboBox<Integer> timePeriodSelector = new ComboBox<>("Time Filter", Arrays.asList(3, 6, 9);
    timePeriodSelector.setEmptySelectionAllowed(false);
    timePeriodSelector.setTextInputAllowed(false);
    timePeriodSelector.setValue(3);
    timePeriodSelector.addValueChangeListener(this::onWeekChange);

... ...

private void onWeekChange(HasValue.ValueChangeEvent<Integer> event) {

    switch (event.getValue()) {
    case 3:
        dateToCompare = LocalDate.now().minusDays(21);
        break;
    case 6:
        dateToCompare = LocalDate.now().minusDays(42);
        break;
    case 9:
        dateToCompare = LocalDate.now().minusDays(63);
        break;
    default:
        dateToCompare = LocalDate.now().plusDays(21);
    }

    ListDataProvider<CcEvent> dataProvider = (ListDataProvider<CcEvent>) eventsOverview.getDataProvider();
    dataProvider.setFilter(CcEvent::getReportingDate,
            date -> compareDates(date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), dateToCompare));
}

private Boolean compareDates(LocalDate dateFromTable, LocalDate dateFromFilter) {
    return dateFromTable.isBefore(dateFromFilter);
}

that piece of code looks nice and is how the Grid filter is intented. 这段代码看起来不错,这就是Grid过滤器的意图。 However all you have to do is switch your setValue call with your addValueChangeListener call. 但是,您要做的就是用addValueChangeListener调用切换setValue调用。

Setting the listener before setting the value ensures that the ValueChangedEvent is triggered! 在设置值之前设置侦听器可确保触发ValueChangedEvent

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM