Topic: Хранение настроек ширины колонок таблицы в базе

Многопользовательское приложение работает с СУБД MySQL. Возникла необходимость сохранять/восстанавливать настройки колонок в базе данных. Неожиданно возникла проблема.


Исходные данные:


1. Восстановление ширины происходит в обработчике события OnChange
2. На форме есть кнопка "Обновить",  (кнопка с функцией обновления таблицы), которая вызывает событие OnChange
3. Событие таблицы OnColumnResize вызывается при любом изменении ширины колонки (вручную, скриптом или внутренним алгоритмом MVD). То есть, при загрузке данных из базы оно вызывается N раз, где N - число колонок. Если используется SQL-запрос, то событие вызывается 2N раз.


Вопрос: в какой момент сохранять настройки?


Если это делать при закрытии формы (как это сделано в MVD) , то в этом случае, если пользователь изменил настройки, а затем нажал кнопку "Обновить", изменения не сохранятся. Добавить сохранение при нажатии кнопки "Обновить" тоже нельзя, так как при первом запуске формы таблица не содержит колонок, они появляются только после заполнения таблицы данными.


Причины проблемы


1. Не вижу возможности отследить ручное изменение ширины колонки
2. Не вижу возможности определить, была ли уже осуществлена загрузка данных в таблицу из БД.


Буду признателен за любые идеи, как решить эту задачу.


P.S. Пока вижу только один вариант: сделать отдельную кнопку для сохранения изменений настройки....

Визуальное программирование: блог и телеграм-канал.

Re: Хранение настроек ширины колонок таблицы в базе

1. OnColumnResize
2. может  OnAfterSort

3 (edited by k245 2021-08-06 06:59:10)

Re: Хранение настроек ширины колонок таблицы в базе

sibprogsistem wrote:

1. OnColumnResize
2. может  OnAfterSort

Да, в итоге я использовал  OnColumnResize, но пришлось добавить специальный механизм, чтобы отличать изменения колонок, которые делает пользователь, от тех изменений, которые делает MVD при загрузке данных: я использовал события OnMouseUp и OnMouseDown, чтобы отслеживать моменты, когда пользователь кликает по заголовку. Там я устанавливаю/сбрасываю флаг, разрешающий сохранение в базу по событию OnColumnResize.


В этом способе есть недостаток - если начать  изменять ширину колонки, нажав кнопку мыши, а затем сместить мышь ниже заголовка, и отпустить кнопку, то ресайз произойдёт, а сохранение - нет. Но пока это лучшее решение.

Визуальное программирование: блог и телеграм-канал.