代码之家  ›  专栏  ›  技术社区  ›  Luis Cordn Tortulec

如何在Grid Vaadin 8中使用setSortOrderProvider?

  •  5
  • Luis Cordn Tortulec  · 技术社区  · 7 年前

    我正在尝试使用网格组件。我需要定义列的顺序,我正在使用以下项目: 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));
    

    但我没有得到预期的结果,我得到的是按名字排序的结果,然后是按姓氏排序的结果,但我需要按姓氏排序的结果。

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

    非常感谢。

    2 回复  |  直到 7 年前
        1
  •  4
  •   Steffen Harbich    7 年前

    我深入研究了代码,发现你需要你需要打电话 setComparator 而不是 setSortOrderProvider . 前者用于内存中的数据提供程序。不幸的是,它有点混乱,并且没有很好的文档记录。

        2
  •  3
  •   Luis Cordn Tortulec    7 年前

    我使用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));