Каталог решений - Выделение текущей строки в отчете (сделать сразу во всех отчетах и ничего не сломать)

Выделение текущей строки в отчете (сделать сразу во всех отчетах и ничего не сломать)

Выделение текущей строки в отчете (сделать сразу во всех отчетах и ничего не сломать)

В наличии

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

Категория:

Описание

Столкнулся давеча с задачей:

  1. Пользователям сложно смотреть отчёты, в которых много колонок. Им хотелось подсвечивать текущую строку (строку в которую они ткнули мышкой), чтобы с неё взгляд не сбивался на соседние строки.
  2. Также необходимо, чтобы при выделении пользователем нескольких ячеек из соседних строк, выделялись все эти несколько строк.
  3. Далее решено было добавить этот механизм ВО ВСЕ отчёты и ПРИ ЭТОМ НИЧЕГО НЕ СЛОМАТЬ (здесь было МНОГО тонкостей — всё подробно откомментил в программном коде).

Поиск решения:

  1. Установка выделенных строк не подходит, т.к. придётся скидывать выделение произведённое пользователем, и сломается суммирование чисел в выделенных ячейках, т.к. будет выделяться целиком строка.
  2. Также можно вытащить заголовки строк — но это отъедает лишнее место и для выделения строки, надо тыкать именно в заголовок, а при переходе к ячейке, это выделение слетит и опять ломай глаза для поиска соседних ячеек по строке
  3. Поэтому выбран вариант обведения строки, лишённый минусов выше, но имеющий дополнительный плюс — внутри обведённой строки, отдельно видно выделенные ячейки, что позволяет фокусировать на них внимание.
  4. При этом не стал менять цвет обведения по причинам (но при желании это несложно добавить):
    1. чтобы он не совпал с цветом фона текущей или соседней строки и гарантированно нормально выделялся на фоне строки. А цвет обведения по умолчанию должен изначально удовлетворять данным правилам — поэтому его лучше не трогать.
    2. выше производительность, не нужно в дополнение сохранять и восстанавливать ещё и цвет границы.
  5. Вместо того, чтобы обводить ячейки, естественно можно их заливать фоном. Реализация будет почти та же самая, что и предложена в статье. Не стал делать по причинам:
    1. Но в таком случае есть риск не угадать с фоном, чтобы он одновременно нормально отображался для всех настроек оформления в разных базах.
    2. Выбранный цвет фона может совпасть с соседним цветом фона.
    3. Также вероятность найти отчёт, где ячейки имеют разный фон, выше, чем отчёт, где ячейки по-разному обведены. А когда в строке разные настройки ячеек, это несёт доп. сложности, и в производительности кода и в подборе правильного нового фона выделения.
    4. При заливке фоном мы потеряем то выделение фоном, которое существует и несёт дополнительную информацию. Например, потеряем выделение цветом особой ячейки, или при выделении нескольких строк потеряем чередование цвета строк, которое часто делают для удобства просмотра строк в отчёте.
    5. Для выделения фоном, надо вычислять и хранить больше данных — хранить данные не только верхней и нижней выделенной строки, но и всех внутренних — чтобы вернуть их потом в исходное положение

Смысл найденного решения:

  1. получаем выделенные строки
  2. запоминаем их обведение до наших изменений
  3. обводим выделенные строки
  4. снимаем обведение с предыдущих выделенных строк
  5. ЧТОБЫ НИЧЕГО НЕ СЛОМАТЬ учитываем, что обведение могло быть разным у разных ячеек строки

Распространение решения:
Чтобы решение появилось сразу во всех отчётах, где не переопределена форма отчёта, в общую форму отчёта добавляем программный код ниже. Для отчётов, у которых определена собственная форма отчёта, очевидно, данную настройку надо провести в собственной форме.

 

has been added to your cart:
Оформление заказа