Генератор отчетов FastReport .NET обладает широкими возможностями кастомизации, то есть настройкой «под себя». Из кода пользовательского приложения вы можете создавать собственные компоненты генератора отчетов используя библиотеки FastReport. Таким образом можно создать как собственный дизайнер отчетов, так и его просмотрщик.
Также, вы можете подменять диалоговые окна в дизайнере отчетов, например, окно сохранения файла.
Но поистине безграничные возможности кастомизации дарит исходный код генератора отчетов. Вы можете переделать существующий функционал под свои нужды или добавить новый. Сегодня мы как раз-таки и поговорим о том, как добавить свой собственный элемент управления на панель элементов в дизайнере отчетов.
Допустим, в своих отчетах вы часто используете текстовый объект с определенными настройками. Было бы удобно иметь уже настроенный объект “текст” с определенным шрифтом или выделением цветом, чтобы не настраивать каждый раз эти свойства вручную.
Вам нужно будет просто создать свой собственный объект! Для этого достаточно унаследовать свой объект от уже существующего, если нужно расширить его функционал или создать совершенно новый.
Чтобы создать свой собственный компонент для отчета вам необходимы исходные коды генератора отчетов FastReport .NET. Давайте рассмотрим случай создания собственного объекта на основе объекта Text. Для этого нужно добавить новый класс в корень проекта FastReport:
public class CustomerTextObject : TextObject { public override void OnBeforeInsert(int flags) { base.OnBeforeInsert(flags); Border.Lines = BorderLines.All; } }
В этом классе мы переопределили событие перед вставкой объекта, в котором задали значение по умолчанию для границ объекта. Таким образом наш текстовый объект будет сразу иметь включенные границы. Если вам требуется задать какие-либо другие свойства объекта - без проблем. Выставим цвет:
public override void OnBeforeInsert(int flags) { base.OnBeforeInsert(flags); Border.Lines = BorderLines.All; TextColor = System.Drawing.Color.Gray; }
В случае, если вы хотите создать объект с собственной функциональностью, то наследовать нужно от базового класса ReportComponentBase. Но тогда, помимо свойств объекта, его поведения, вам придется реализовать и отрисовку - метод Draw(). Затем вызвать в нем base.Draw() и добавить рисование объекта.
Давайте взглянем на пример отрисовки объекта Text:
public override void Draw(FRPaintEventArgs e) { base.Draw(e); DrawText(e); DrawMarkers(e); Border.Draw(e, new RectangleF(AbsLeft, AbsTop, Width, Height)); DrawDesign(e); }
Как видите, здесь вызывается сразу несколько методов: для отрисовки текста, маркеров, границ и редактора.
После создания своего объекта, нужно зарегистрировать его, чтобы он появился на панели элементов в дизайнере отчета. Для этого используем метод FastReport.Utils.RegisteredObjects.Add() в классе AssemblyInitializer.cs.
Пример регистрации созданного нами ранее объекта:
RegisteredObjects.Add(typeof(CustomerTextObject), “ReportPage”, 120, 1);
Все параметры по порядку: имя регистрируемого объекта, имя объекта страницы отчета, идентификатор иконки объекта, порядковый номер объекта на панели инструментов. Иконки хранятся в ресурсах. Вы можете добавить свое изображение в формате bmp в ресурсы или передать его непосредственно в параметр метода вместо идентификатора иконки.
Теперь можно скомпилировать решение и запустить дизайнер отчетов. На панели элементов появился еще один контрол:
Мы использовали иконку от объекта Text, поэтому он выглядит также. А теперь добавим его на страницу отчета и введем текст:
Как видим, и рамки, и цвет текста соответствуют нашим установка в коде. Мы с вами создали “кастомный” объект Text, который имеет предустановки границ и цвета текста. Вы можете настроить этим способом любой существующий объект в отчете, или создать свой собственный.