如何在Grid Vaadin 8中使用setSortOrderProvider?

时间:2018-01-08 20:24:29

标签: grid vaadin vaadin8

我正在尝试使用网格组件。我需要定义列的顺序,我正在使用这个项目: https://github.com/vaadin/tutorial/tree/v8-step4

我添加了这段代码:

Column name = grid.addColumn(customer -> customer.getFirstName() + " " + customer.getLastName())
    .setCaption("Name")
    .setSortOrderProvider(direction -> Stream.of(
            new QuerySortOrder("lastName", direction)
            ));

grid.setSortOrder(GridSortOrder.asc(name));

但是我没有得到预期的结果,我按照firstName然后按lastName排序,但我需要按lastName排序的结果。

你有同样的问题吗?你是怎么解决的?

谢谢。

2 个答案:

答案 0 :(得分:1)

我深入研究了代码,发现您需要拨打setComparator而不是setSortOrderProvider。前者适用于内存数据提供者。不幸的是,它有点令人困惑,并没有很好的记录。

答案 1 :(得分:1)

我使用setComparator的这个实现,它正在工作。 :)

Column name = grid.addColumn(customer -> customer.getFirstName() + " " + customer.getLastName())
        .setCaption("Name")
        .setComparator(new SerializableComparator<Customer>() {

            @Override
            public int compare(Customer arg0, Customer arg1) {
                return arg0.getLastName().compareTo(arg1.getLastName());
            }
        });

使用Lambda:

.setComparator((customer0, customer1) -> {
            return customer0.getLastName().compareTo(customer1.getLastName());
        });

和另一个选择:

Column name = grid.addColumn(customer -> customer.getFirstName() + " " + customer.getLastName())
        .setCaption("Name")
        .setComparator(grid.getColumn("lastName").getComparator(SortDirection.ASCENDING));