Как вы, наверное, знаете отчеты в FastReport .NET можно создавать не только в специальном дизайнере, но и программно, из кода пользовательского приложения. При этом, вместо привычного файла с расширением frx вы получите класс отчета. Его можно преобразовать в библиотеку и использовать в разных проектах. Что из себя представляет такой способ создания отчета?
Взгляните на этот код:
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
//Create instance of class Report Report report = new Report(); //load data DataSet ds = new DataSet(); ds.ReadXml(AppFolder + "\\nwind.xml"); //Register data source report.RegisterData(ds); //Enable data table report.GetDataSource("Products").Enabled = true; //Add report page ReportPage page = new ReportPage(); report.Pages.Add(page); page.CreateUniqueName(); //Create GroupHeader band GroupHeaderBand group = new GroupHeaderBand(); page.Bands.Add(group); group.CreateUniqueName(); group.Height = Units.Centimeters * 1; group.Condition = "[Products.ProductName].Substring(0,1)"; group.SortOrder = FastReport.SortOrder.Ascending; // create group text TextObject groupTxt = new TextObject(); groupTxt.Parent = group; groupTxt.CreateUniqueName(); groupTxt.Bounds = new RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 1); groupTxt.Text = "[[Products.ProductName].Substring(0,1)]"; groupTxt.Font = new Font("Arial", 14, FontStyle.Bold); groupTxt.VertAlign = VertAlign.Center; groupTxt.Fill = new LinearGradientFill(Color.LightGoldenrodYellow, Color.Gold, 90, 0.5f, 1); // create data band DataBand data = new DataBand(); group.Data = data; data.CreateUniqueName(); data.DataSource = report.GetDataSource("Products"); data.Height = Units.Centimeters * 0.5f; // create product name text TextObject productText = new TextObject(); productText.Parent = data; productText.CreateUniqueName(); productText.Bounds = new RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f); productText.Text = "[Products.ProductName]"; // create group footer group.GroupFooter = new GroupFooterBand(); group.GroupFooter.CreateUniqueName(); group.GroupFooter.Height = Units.Centimeters * 1; if (PDFCheckBox.Checked) { report.Prepare(); FastReport.Export.Pdf.PDFExport export = new FastReport.Export.Pdf.PDFExport(); export.Export(report); } else report.Show(); |
Это пример создания шаблона отчета с группами. Как видите, мы последовательно создаем объекты отчета, начиная с самого отчета и страницы и заканчивая текстовыми объектами. Мы помещаем созданные объекты внутрь других и настраиваем свойства их отображения. Это требует хорошего представления структуры шаблона отчета FastReport.Net. Кроме того, чтобы добиться нужного расположения элементов, вам придется много раз запускать отчет для визуальной оценки и исправлять свойства объектов, выставляя нужную ширину или координаты. Поэтому использовать этот подход следует для отчетов со списками, матрицами, таблицами – там, где не требуется выверять расположение элементов относительно друг друга.
Главное преимущество отчета, создаваемого в коде - возможность редактировать отчеты во время выполнения, добавляя код в зависимости от условий или событий. Это позволяет создавать отчеты со сложной логикой, напрямую зависящей от самого клиентского приложения.
Не секрет, что шаблоны отчетов FastReport .NET имеют xml-подобный формат, несмотря на расширение frx. Такие шаблоны легко передавать и просматривать на других компьютерах с помощью программы-просмотрщика. Мобильность и независимость от клиентских приложений - это неоспоримые преимущества традиционного шаблона отчета в формате frx, или его версии с заполненными данными в формате fpx. Поэтому, имея в своем приложении отчеты, созданные из кода, многие хотели бы иметь возможность преобразовать их в обычный xml-подобный формат frx. Сделать это невероятно просто:
1 2 |
Report report = new Report(); report.Save("C:\\report.frx"); |
То есть нужно просто использовать функцию Save у объекта report. В качестве параметра передаем путь с именем файла, в который будет сохранен отчет. Таким образом мы можем использовать один отчет, создаваемый из кода, а, при необходимости, преобразовывать его в традиционный формат frx. Полученный файл можно передавать другим разработчикам, или пользователям.
Как на отчеты основе кода, так и на отчеты в формате frx имеют свои преимущества. Первый – выигрывает, когда отчет нужно изменять прямо «на ходу», второй – когда требуется мобильный отчет, или шаблон имеет много элементов с четко определённым их расположением друг относительно друга. Нужно выбирать способ создания отчета на основе этих преимуществ.