【问题标题】:How do you get the column order for the Grid in Vaadin 14?您如何获得 Vaadin 14 中网格的列顺序?
【发布时间】:2021-10-20 11:41:29
【问题描述】:

在 Vaadin 8 中,您可以执行以下操作,例如按照屏幕上显示的顺序获取列列表。

String columnOrderPreference = ((List<Grid.Column>)grid.getColumns()).stream()
            .map(Grid.Column::getId)
            .collect(Collectors.joining(VALUE_SEPARATOR));

这特别方便,因为您可以保存该字符串,然后调用:

grid.setColumnOrder(columnOrderPreference.split(VALUE_SEPARATOR));

在 Vaadin 14 中(忽略 getId() 现在应该使用 getKey())这不再可能,因为 getColumns() 列表现在总是按照它们添加的顺序而不是它们的排序顺序返回。您仍然可以调用 setColumnOrder(...)(使用不同的参数 - grid.getColumnByKey(columnKey) 的列表),但我不知道如何按显示顺序获取列列表。

这对于尝试保存用户在返回同一页面(使用网格)时设置/更改的列顺序特别有用。

【问题讨论】:

    标签: vaadin vaadin-flow vaadin14


    【解决方案1】:

    您可以listenColumnReorderEvent 在网格上。

    Registration addColumnReorderListener(ComponentEventListener<ColumnReorderEvent<T>> listener)
    

    活动举行:

    /* Gets the new order of the columns. */
    List<Grid.Column<T>> getColumns()
    

    【讨论】:

    • 感谢您的帮助。网格本身没有选项吗?我问是因为这意味着我必须有一个特殊的事件侦听器来重新排序,而我可以对所有其他代码使用相同的代码,并且只需在任何更改(列宽、排序顺序、列可见性、等)
    • (也是上面的评论)我将所有内容存储在一个通过特殊首选项处理类解析的字符串中。但是,如果只能通过事件检索列顺序,那么这可能会变得非常麻烦,因为必须为事件处理代码保存列顺序,例如将列宽保存为整个字符串的一部分,因为我不能再从网格中获取其他事件的顺序...
    • 我在其他代码中还有一个列隐藏/显示按钮,它会询问网格的首选项,以便将其全部存储为已解析的字符串。我假设在这种情况下,列顺序信息也需要存储,因为无法检索。对于所有问题,我深表歉意,但如果网格的状态不能被询问,这是一个相当大的重构。
    • 那或者我必须扩展网格来保存我不想做的信息......
    • 我实际上并没有跟随。我的意思是我理解您对这种情况不满意,但您从已知良好的网格设置开始,即默认设置。然后你就拥有了所有的监听器,这样你就可以对用户所做的更改做出反应(总是必须是监听器)。然后,您从设置 + 更改中派生设置并为用户保留这些设置。
    【解决方案2】:

    不幸的是,在 Vaadin 14 中,getColumns 没有以正确的顺序返回列。如前所述,您可以在使用事件 GridReorderEvent 时获取订单,并且您需要存储它。这里有一个功能请求(如果您有兴趣,这会给您一些技术原因):https://github.com/vaadin/flow-components/issues/1315

    您可以添加评论或投票,因为这会使从 Vaadin 8 的迁移变得更加困难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多