Vaadin 网格用户列按用户重新排序和保存

Vaadin grid user column re-ordering and saving per user

人们如何倾向于让用户重新排序网格列并保存该排序供以后使用?

至少在 Vaadin 7 中,我能想到的唯一方法是:

  1. 通过addColumnReorderListener(…)
  2. 监听列重新排序
  3. 触发重新排序时,如果用户发起,则从 getColumns() 获取列并使用任何标识信息保存到数据库
  4. 当拉回网格时,从数据库中读取网格顺序并应用与 setColumnOrder(columns)
  5. 相同的顺序

那么有更好的方法吗?我刚刚检查了目录,找不到任何明显的东西可以使这更容易。只是在寻找其他人如何解决此用户需求。如果 Vaadin 14 已经支持这样的操作更容易一些,那也很好知道,因为它可能会给我一些关于如何在升级到 Vaadin 14 之前短期内获得该能力的想法。

根据评论,让人们知道我是如何解决这个问题的:

  1. 将数据加载到网格时,首先检查数据库中是否有此 Grid/user 组合的列。如果找到这样的列顺序,调用setColumnOrder(userColumns).
  2. 在顶部添加了 2 个按钮,一个用于保存列顺序,一个用于重置它。
  3. “保存”按钮仅在至少移动一列后启用。
  4. “重置”按钮仅在至少移动一列时启用。由于 DB,或者因为用户只是移动了一列,一列被移动了。
  5. 保存时,保存到数据库。重置时,从数据库中清除,并将网格重置为原始列顺序。

我们选择不在每次更改顺序时直接在 addColumnReorderListener 中保存列顺序,因为我们意识到有时用户可能会临时移动列,而人们真的想保存该列顺序未来。也就是说,addColumnReorderListener 中的保存效果很好。

我们目前不需要按照@Simon Martinelli 的建议保存列大小,但我们将保留它作为未来的想法。我完全希望它会起作用。

对于自定义程度更高的网格,您可以(除了您已经完成的操作之外)添加一个按钮,用于打开一个对话框,其中列出了所有可能的列名以及一个复选框。 取消选中该复选框将删除该列,选中该复选框将添加该列。

更舒适的是,当对话框在 Grid 中列出所有可用的列时,带有可拖动的行和可编辑的复选框,以便用户可以在一个地方显示、隐藏和排序所有列。之后,您必须通过调用 grid.setColumnOrder.

对所有列重新排序