Выделение текущей строки в отчете (сделать сразу во всех отчетах и ничего не сломать)
Как за 10 минут упростить работу с отчётами программистам и пользователям. Добавить ВО ВСЕ ОТЧЁТЫ механизм автоматического выделения текущей строки отчёта (той, на которой установлен курсор). И ПРИ ЭТОМ НИЧЕГО НЕ СЛОМАТЬ.
- Описание
- Подробнее
Описание
Столкнулся давеча с задачей:
- Пользователям сложно смотреть отчёты, в которых много колонок. Им хотелось подсвечивать текущую строку (строку в которую они ткнули мышкой), чтобы с неё взгляд не сбивался на соседние строки.
- Также необходимо, чтобы при выделении пользователем нескольких ячеек из соседних строк, выделялись все эти несколько строк.
- Далее решено было добавить этот механизм ВО ВСЕ отчёты и ПРИ ЭТОМ НИЧЕГО НЕ СЛОМАТЬ (здесь было МНОГО тонкостей — всё подробно откомментил в программном коде).
Поиск решения:
- Установка выделенных строк не подходит, т.к. придётся скидывать выделение произведённое пользователем, и сломается суммирование чисел в выделенных ячейках, т.к. будет выделяться целиком строка.
- Также можно вытащить заголовки строк — но это отъедает лишнее место и для выделения строки, надо тыкать именно в заголовок, а при переходе к ячейке, это выделение слетит и опять ломай глаза для поиска соседних ячеек по строке
- Поэтому выбран вариант обведения строки, лишённый минусов выше, но имеющий дополнительный плюс — внутри обведённой строки, отдельно видно выделенные ячейки, что позволяет фокусировать на них внимание.
- При этом не стал менять цвет обведения по причинам (но при желании это несложно добавить):
- чтобы он не совпал с цветом фона текущей или соседней строки и гарантированно нормально выделялся на фоне строки. А цвет обведения по умолчанию должен изначально удовлетворять данным правилам — поэтому его лучше не трогать.
- выше производительность, не нужно в дополнение сохранять и восстанавливать ещё и цвет границы.
- Вместо того, чтобы обводить ячейки, естественно можно их заливать фоном. Реализация будет почти та же самая, что и предложена в статье. Не стал делать по причинам:
- Но в таком случае есть риск не угадать с фоном, чтобы он одновременно нормально отображался для всех настроек оформления в разных базах.
- Выбранный цвет фона может совпасть с соседним цветом фона.
- Также вероятность найти отчёт, где ячейки имеют разный фон, выше, чем отчёт, где ячейки по-разному обведены. А когда в строке разные настройки ячеек, это несёт доп. сложности, и в производительности кода и в подборе правильного нового фона выделения.
- При заливке фоном мы потеряем то выделение фоном, которое существует и несёт дополнительную информацию. Например, потеряем выделение цветом особой ячейки, или при выделении нескольких строк потеряем чередование цвета строк, которое часто делают для удобства просмотра строк в отчёте.
- Для выделения фоном, надо вычислять и хранить больше данных — хранить данные не только верхней и нижней выделенной строки, но и всех внутренних — чтобы вернуть их потом в исходное положение
Смысл найденного решения:
- получаем выделенные строки
- запоминаем их обведение до наших изменений
- обводим выделенные строки
- снимаем обведение с предыдущих выделенных строк
- ЧТОБЫ НИЧЕГО НЕ СЛОМАТЬ учитываем, что обведение могло быть разным у разных ячеек строки
Распространение решения:
Чтобы решение появилось сразу во всех отчётах, где не переопределена форма отчёта, в общую форму отчёта добавляем программный код ниже. Для отчётов, у которых определена собственная форма отчёта, очевидно, данную настройку надо провести в собственной форме.
