logo
small logo
  • Продукты
  • Купить
  • Поддержка
  • Статьи
  • Клиентская панель Поддержка
  • Главная
  • /
  • Статьи
  • /
  • Выделение текста цветом по клику мышью
  • Интерактивный веб отчет - детальная страница

    14 августа 2017 г.

    Интерактивные отчеты позволяют пользователю взаимодействовать с отчетом посредством гиперссылок. Благодаря гиперссылкам можно запускать другие отчеты

    Подробнее
  • Интерактивная матрица в веб отчете

    14 августа 2017 г.

    Давайте вспомним как создать интерактивную матрицу. Воспользуемся базой данных xml из поставки FastReport.Net. Выбираем таблицы:

    Подробнее
  • Интерактивный web отчет с раскрывающимися группами

    15 августа 2017 г.

    В этой статье мы рассмотрим, как создавать интерактивные отчеты с раскрывающимися группами. Мы будем группировать

    Подробнее
  • Интерактивный веб отчет с планом и закладками

    16 августа 2017 г.

    Интерактивные отчеты позволяют пользователю взаимодействовать с ним. Например, отчет может содержать гиперссылки, закладки, содержание. По

    Подробнее
  • Копирование бэндов отчета в другой со всем содержимым.

    31 марта 2021 г.

    Иногда возникает необходимость использовать части одного отчета в другом. В простых случаях для этого можно

    Подробнее

Выделение текста цветом по клику мышью

17 августа 2017 г.

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

Способ 1. Суть этого способа заключается в использовании sender (объекта, который вызвал событие) для присвоения нового цвета в обработчике события OnCklick.  При этом, нужно обновить страницу отчета в кэше, т.к. режим предварительного просмотра отображает отчет из него.

Итак, создадим простейший отчет со списком товаров:

Допустим, мы хотим выделять цветом одно из полей при нажатии мышью. А также убирать выделение при повторном нажатии на него. Для текстового объекта, в котором выводится поле Products.ProductName, создаем событие Click.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 private void Text1_Click(object sender, EventArgs e)
 { 
 if (sender is TextObject)
 {
 //Определяем sender как TextObject
 TextObject obj = sender as TextObject;
 //Метод перекрашивания объекта цветом
 SwitchColor(obj);
 if(Report.Preview != null)
 {
 //Обновить текущую страницу отчета в кэше, если отчет просматривается на десктопе
 Report.PreparedPages.ModifyPage(Report.Preview.PageNo - 1, obj.Page as ReportPage);
 //Перерисовать превью
 Report.Preview.Refresh();
 } 
 } 
 }
 
 private void SwitchColor(TextObject obj)
 {
 //Проверяем имеет ли объект желтую заливку
 if (obj.Fill is SolidFill && (obj.Fill as SolidFill).Color != Color.Yellow)
 //Заливаем желтым
 obj.Fill = new SolidFill(Color.Yellow);
 //Очищаем заливку
 else
 obj.Fill = new SolidFill(Color.Transparent); 
 }
 

Как вы видим, из события нажатия мы берем объект sender, определяем его как текстовый объект и изменяем его заливку. Затем, перерисовываем страницу отчета в кэше.

В случае, если у нас веб отчет, мы просто изменяем заливку объекта, без перерисовывания страницы отчета.

Рассмотрим альтернативный способ.

Способ 2. Суть этого способа заключается в определении координат объекта, который мы будем заливать цветом. Затем мы обновляем страницу отчета в кэше, как и в первом способе.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
private void Text1_Click(object sender, EventArgs e)
 { 
 if (sender is TextObject)
 {
 // Получаем номер текущей страницы
 int pageNo = Report.Preview.PageNo - 1;
 // Получаем саму страницу по номеру
 ReportPage page = Report.PreparedPages.GetPage(pageNo);
 // Определяем sender как TextObject – это фантомный объект, нам же нужен оригинальный объект из страницы предварительного просмотра
 TextObject obj = sender as TextObject;
 // Ищем оригинальный объект на странице предварительного просмотра
 foreach(ReportComponentBase b in page.AllObjects)
 // Нужно идентифицировать объект по имени и координатам
 if (b.Name == obj.Name && b.AbsTop == obj.AbsTop && b.AbsLeft == obj.AbsLeft)
 {
 // Получаем оригинальный объект
 obj = b as TextObject;
 break;
 } 
 // Задаем заливку объекта
 if (obj.Fill is SolidFill && (obj.Fill as SolidFill).Color != Color.Yellow)
 obj.Fill = new SolidFill(Color.Yellow);
 else
 obj.Fill = new SolidFill(Color.Transparent);
 
 // Обновляем страницу отчета в кэше
 Report.PreparedPages.ModifyPage(pageNo, page);
 // перерисовываем превью
 Report.Preview.Refresh();
 }
 }
 

Продемонстрируем работу этого кода:

Этот способ объективно сложнее, и работает только для режима предварительного просмотра. Однако, в нем есть свои преимущества. Допустим вы хотите выделить цветом не только текстовый объект, на который вы нажали, но и всю строку в таблице. Тогда добавляем еще один текстовый объект поверх того, на который мы будем кликать. Растягиваем его на всю ширину строки. Тут важно, чтобы левая граница добавляемого текстового объекта совпадала с левой границей текстового объекта, для которого мы создали событие Click. Делаем правый клик по нему. И выбираем из меню:

 

Тем самым передвигаем этот объект на задний план, чтобы он не перекрывал другие текстовые поля.

Модифицируем немного наш предыдущий код:

1
2
3
4
5
6
7
 if (b.AbsTop == obj.AbsTop && b.AbsLeft == obj.AbsLeft)
 {
 // Получаем оригинальный объект
 obj = b as TextObject;
 break;
 } 
 

Из условия я убрал сравнение по имени и оставил лишь сравнение по координатам начала поля.

А теперь запустим отчет и нажмем на название какого-нибудь продукта:

 

Таким образом, оба способа жизнеспособны. Первый – проще, но позволяет выделять только конкретный объект, который мы получаем в sender. Второй – сложнее, но позволяет выделять цветом не только объект из sender, но и другие. Нужно лишь указать их координаты. В веб отчете вы сможете использовать только первый способ.

Конечно же вы можете не только изменять цвет фона, но и цвет, стиль или шрифт самого текста. Кроме того, все подобные модификации отчета сохранятся при экспорте в любой из поддерживаемых форматов, например в PDF.

Надеюсь вам пригодятся этот небольшой лайфхак.

О продукте Скачать Купить
avatar
Dmitriy Fedyashov
Технический писатель
Fast Reports Team: Dmitriy Fedyashov - Technical Writer at Fast Reports
.NET FastReport Interactivity

Добавить комментарий
logo
  • +7(800)551-75-80
  • info@fastreport.ru
  • Ростов-на-Дону, Россия, 344082, ул.Обороны 24, офис 311
  • Купить
  • Загрузить
  • Документация
  • Отзывы
  • Как деинсталировать
  • Онлайн поддержка
  • FAQ
  • Видео уроки
  • Форум
  • Статьи
  • Наши Новости
  • Пресса о нас
  • Реселлеры
  • Нестандартное лицензирование
  • ВУЗам
  • Карьера
  • Контакты

© 1998-2022 ООО «Фаст Репортс»

  • Согласие с обработкой персональных данных
  • Не является публичной офертой