Довольно часто возникает потребность задавать различные изображения в отчете в зависимости от каких-либо условий или входящих параметров. С этой проблемой столкнулся пользователь генератора отчетов List&Label:
Есть ли способ программной вставки встроенного изображения в документ List & Label из кода .net?
Однако, пользователь не нашел решения.
К сожалению, невозможно вставить изображение из кода .NET. Это возможно только при работе с отчетом в дизайнере List & Label.
В свете этого, хочется показать, как такое можно реализовать в генераторе отчетов FastReport.Net.
Итак, при создании отчета мы работаем со всеми его объектами напрямую – создаем их, добавляем на страницу отчета, задаем свойства. Рассмотрим простой пример создания отчета из кода пользовательского приложения с картинкой внутри.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//Create instance of class Report Report report = new Report(); //Add report page ReportPage page = new ReportPage(); report.Pages.Add(page); page.CreateUniqueName(); //App data band DataBand data = new DataBand(); //Add data band to page page.Bands.Add(data); data.CreateUniqueName(); data.Height = Units.Centimeters * 1; //Set band height //Create picture object PictureObject pic = new PictureObject(); pic.Bounds = new RectangleF(0, 0, Units.Centimeters * 5, Units.Centimeters * 5); //Set object bounds pic.Image = new Bitmap("../../App_Data/snow_flake.ico"); //Set picture pic.Parent = data; //Set picture parent object pic.CreateUniqueName(); report.Prepare(); //Build report report.Show(); //Show report |
Это очень простой пример отчета, в котором всего лишь один бэнд «Данные». Так как этот отчет целиком создается в коде программы, то нет никаких проблем создать объект с картинкой и поместить в отчет. Создание отчета из кода позволяет нам как угодно менять его в зависимости от логики программы.
Рассмотрим другой случай. Допустим у вас уже есть шаблон отчета, созданный в дизайнере. Вы хотите менять картинку в отчете в зависимости от логики программы. В таком случае, в шаблоне отчета уже должен быть объект Picture, а вы просто будете заменять саму картинку из кода пользовательского приложения. Вот как будет выглядеть код в программе:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//Create report object Report report = new Report(); //Load report template into the report obj report.Load("../../App_Data/Picture.frx"); //Get picture object from the report template PictureObject pic = report.FindObject("Picture1") as PictureObject; //Set object bounds pic.Bounds = new RectangleF(0, 0, Units.Centimeters * 5, Units.Centimeters * 5); //Set the image pic.Image = new Bitmap("../../App_Data/snow_flake.ico"); //Build report report.Prepare(); //Show report report.Show(); |
Здесь, мы находим объект с картинкой в шаблоне отчета и изменяем его свойства по своему желанию.
И, наконец, третий вариант работы с объектом Picture – из встроенного скрипта отчета. Скрипт отчета позволяет изменять шаблон и данные в отчете, как угодно. Вы можете предварительно добавить в шаблон объект Picture, а можете добавить его непосредственно в скрипте отчета. Поистине, безграничная гибкость. Нет необходимости использовать пользовательское приложение для управления содержимым отчета. Это большой плюс для меня, ведь отпадает необходимость править код приложения.
Пример для задания изображения в скрипте отчета крайне прост:
1 |
Picture1.Image = new Bitmap("C:/Users/Dimon/source/repos/PictureSetting/PictureSetting/App_Data/snow_flake.ico");
|
Вам нужно только определиться с событием, в котором вы хотите изменять картинку, например, для объекта Picture можно использовать событие BeforePrint.