Как создать отчет из кода приложения на VB.NET

17.09.2020

Говоря о фреймворке .NET, как правило, мы представляем себе язык программирования #C. Просто потому, что доля сишарп программистов подавляющая. Но не стоит забывать и о других языках. Так, например, пользователь генератора отчетов от компании Stimulsoft хочет создать отчет из кода приложения на языке VB.NET:

“… At this moment I just testing, I would like create a report with code from VB. inside my code I create a StiReport Object, a title and text.

by the moment I trying to show a report with the tittle that I program in VB. but not show me anything in my web application. 
Can you give me some guidance on how to do this would be possible to design the report from VB and it shows?
Or if I'm omitting any instruction or object to make the report?...”

https://forum.stimulsoft.com/viewtopic.php?f=8&t=2806

Как и любой другой генератор отчетов, который позволяет создавать отчеты из кода, Stimulsoft Reports.Net можно использовать из кода на языке VB.NET. Разработчики любезно разъяснили пользователю как это делать.

Но, рассматривая те или иные случаи применения FastReport.Net, мы практически не встречаем примеров на языке VB.NET. Ввиду этого, в этой статье хотелось бы исправиться и показать пример создания отчета из кода пользовательского приложения на языке VB.NET.

Собственно, это лишь интерпретация кода C#:

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
 Dim AppFolder As String
 Dim report As New Report() 'create instance of class Report
 Dim ds As New DataSet() 'create dataset object
 
 AppFolder = "C:\Users\User\source\repos\VBCodeReport\VBCodeReport\App_Data"
 'load data
 ds.ReadXml(AppFolder + "\nwind.xml")
 report.RegisterData(ds)
 report.GetDataSource("Products").Enabled = True
 'create report page
 Dim page As New ReportPage()
 report.Pages.Add(page) 'add created page to report page collection
 page.CreateUniqueName() 'with generated name
 'create group header band
 Dim group As New GroupHeaderBand()
 page.Bands.Add(group) 'add the band to band collection
 group.CreateUniqueName() 'with generated name
 group.Height = Units.Centimeters * 1
 group.Condition = "[Products.ProductName].Substring(0,1)" 'set the group condition
 group.SortOrder = FastReport.SortOrder.Ascending 'and set sort order
 'create text object
 Dim groupTxt As New TextObject()
 groupTxt.Parent = group 'set the object on whitch the text will be shown
 groupTxt.CreateUniqueName()
 groupTxt.Bounds = New RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 1) 'set the text object bounds
 groupTxt.Text = "[[Products.ProductName].Substring(0,1)]" 'set the text value
 groupTxt.Font = New Font("Arial", 14, FontStyle.Bold) 'set the font style
 groupTxt.VertAlign = VertAlign.Center ' set the text align
 groupTxt.Fill = New LinearGradientFill(Color.LightGoldenrodYellow, Color.Gold, 90, 0.5F, 1) 'set the text object fill
 'create data band
 Dim data As New DataBand()
 group.Data = data 'set the group data
 data.CreateUniqueName()
 data.DataSource = report.GetDataSource("Products") 'set data band source
 data.Height = Units.Centimeters * 0.5F 'set data band height
 'create one more text object
 Dim productText As New TextObject()
 productText.Parent = data 'add the text object to data band
 productText.CreateUniqueName()
 productText.Bounds = New RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 0.5F) 'set the text object bounds
 productText.Text = "[Products.ProductName]" 'set the text value
 'create group footer band
 group.GroupFooter = New GroupFooterBand()
 group.GroupFooter.CreateUniqueName()
 group.GroupFooter.Height = Units.Centimeters * 1 'set the group footer height
 'create total object
 Dim groupTotal As New Total()
 groupTotal.Name = "TotalRows" 'set total object name
 groupTotal.TotalType = TotalType.Count 'set total type
 groupTotal.Evaluator = data 'set the band for which the total will be calculated
 groupTotal.PrintOn = group.GroupFooter 'set the total place
 report.Dictionary.Totals.Add(groupTotal) 'add the total object to totals collection
 'create text object
 Dim totalText As New TextObject()
 totalText.Parent = group.GroupFooter 'set the object on whitch the text will be shown
 totalText.CreateUniqueName()
 totalText.Bounds = New RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 0.5F) 'set the text object bounds
 totalText.Text = "Rows: [TotalRows]" 'set the text value
 totalText.HorzAlign = HorzAlign.Right 'set the text align
 totalText.Border.Lines = BorderLines.Top 'set the border lines type
 report.Show() 'show report

Из кода и комментариев понятно, что создается отчет с группировкой данных. Тем не менее, этот пример показывает работу с наиболее часто используемыми объектами в простых отчетах. Обратите внимание, что мало создать объект отчета, его еще нужно «положить» на тот объект, где он будет отображаться. Это ключевой момент в правильном создании отчета из кода.

 Образец отчета, созданный с помощью VB.Net кода

 

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.