Как люди склонны позволять пользователям изменять порядок столбцов сетки и сохранять этот порядок на будущее?

Единственный способ сделать это, по крайней мере, в Vaadin 7, - это:

  1. Следите за изменением порядка столбцов через addColumnReorderListener(…)
  2. При срабатывании повторного заказа, если инициировано пользователем, получить столбцы из getColumns() и сохранить в БД с любой идентифицирующей информацией
  3. Когда вытащите сетку обратно, прочтите порядок сетки из БД и примените тот же порядок с setColumnOrder(columns)

Так есть ли лучший способ сделать это? Я только что проверил Справочник, не нашел ничего очевидного, чтобы упростить задачу. Просто ищу, как другие учли это требование пользователя. Если Vaadin 14 уже поддерживает такие действия немного проще, было бы неплохо узнать об этом, так как это может дать мне некоторые идеи о том, как получить эту способность в краткосрочной перспективе, прежде чем я смогу перейти на Vaadin 14.

1
Tony B 26 Окт 2021 в 01:30
Ваш путь звучит так же, как и в любой версии, хотя использование cookie может быть немного проще, чем использование базы данных.
 – 
ollitietavainen
26 Окт 2021 в 09:16
2
Я именно так и делаю в нашем приложении, как вы описываете. И я также использую addColumnResizeListener, чтобы сохранить ширину столбцов в базе данных.
 – 
Simon Martinelli
26 Окт 2021 в 10:37
У меня нет опыта активного использования файлов cookie. Несмотря на все изменения в восприятии файлов cookie в последние годы, они по-прежнему являются хорошим способом решения таких проблем. Например, многие люди запрещают использование файлов cookie. Я не разбираюсь в этом аспекте веб-разработки, поэтому не знаю, в каком направлении идут дела. Конечно, судя по некоторым сообщениям, которые я читал, управление файлами cookie в Vaadin 7 может быть затруднено с включенным push, но это отдельная проблема.
 – 
Tony B
26 Окт 2021 в 19:37
1
Да, если у вас есть работающее решение, в котором вы сохраняете порядок столбцов в базе данных, нет необходимости переходить на файлы cookie.
 – 
ollitietavainen
27 Окт 2021 в 09:01
Это немного странно сформулированный вопрос для StackOverflow. Поскольку здесь не принято давать ответ типа «Да, правильно», я бы порекомендовал вам отредактировать вопрос и представить шаги 1, 2, 3 в качестве ответа, чтобы вопрос не остался нерешенным.
 – 
Tatu Lund
3 Ноя 2021 в 21:30

2 ответа

Лучший ответ

Просто чтобы люди знали, как я решил эту проблему, основываясь на комментариях:

  1. При загрузке данных в сетку сначала проверьте базу данных на наличие столбцов этой комбинации сетка / пользователь. Если вы найдете такой порядок столбцов, позвоните setColumnOrder(userColumns).
  2. Вверху добавлены 2 кнопки: одна для сохранения порядка столбцов, одна для его сброса.
  3. Кнопка «Сохранить» активируется только после перемещения хотя бы одного столбца.
  4. Кнопка «Сбросить» активна, только если был перемещен хотя бы один столбец. Один столбец был перемещен либо из-за БД, либо из-за того, что пользователь ПРОСТО переместил столбец.
  5. При сохранении сохраните в БД. При сбросе очистите базу данных и восстановите сетку до исходного порядка столбцов.

Мы решили не сохранять порядок столбцов каждый раз, когда они меняли порядок, непосредственно в addColumnReorderListener, потому что мы поняли, что иногда пользователи могут временно перемещать столбцы, и очень хочется сохранить этот порядок столбцов на будущее. Тем не менее, сохранение внутри addColumnReorderListener прошло хорошо.

В настоящее время нам не нужно сохранять размеры столбцов, как предлагает @Simon Martinelli, но мы сохраняем это как идею на будущее. Я полностью уверен, что это сработает.

1
Tony B 30 Ноя 2021 в 21:19

Для более настраиваемой сетки вы можете (в дополнение к тому, что вы уже сделали) добавить кнопку, которая открывает диалоговое окно, в котором перечислены все возможные имена столбцов вместе с флажком. Снятие флажка удаляет столбец, установка флажка добавляет столбец.

Еще удобнее, когда в диалоговом окне перечислены все доступные столбцы в Grid с перетаскиваемыми строками и редактируемыми флажками, так что пользователь может отображать, скрывать и сортировать все столбцы в одном месте. После этого вам нужно изменить порядок всех столбцов, вызвав grid.setColumnOrder.

1
S. Doe 30 Ноя 2021 в 15:22