-
Notifications
You must be signed in to change notification settings - Fork 1
/
ReportCreator.vb
169 lines (138 loc) · 5.86 KB
/
ReportCreator.vb
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#Region "usings"
Imports DevExpress.DataAccess.Sql
Imports DevExpress.XtraPrinting
Imports DevExpress.XtraReports.UI
Imports System.Drawing
#End Region
Namespace RuntimeSqlDataSourceReportSample
Friend Class ReportCreator
#Region "CreateReport"
Public Shared Function CreateReport(ByVal dataSource As Object) As XtraReport
Dim ds As SqlDataSource = TryCast(dataSource, SqlDataSource)
If ds Is Nothing Then
Return New XtraReport()
End If
' Create an empty report.
Dim report As New XtraReport()
' Bind the report to a data source.
report.DataSource = ds
report.DataMember = ds.Queries(0).Name
' Create a master part.
CreateReportHeader(report, "Products by Categories")
CreateDetail(report)
' Create a detail part.
CreateDetailReport(report, ds.Queries(0).Name & "." & ds.Relations(0).Name)
Return report
End Function
#End Region
#Region "CreateMasterReport"
Private Shared Sub CreateReportHeader(ByVal report As XtraReport, ByVal caption As String)
' Create a report title.
Dim label As New XRLabel()
label.Font = New Font("Tahoma", 12, FontStyle.Bold)
label.Text = caption
label.WidthF = 300F
' Create a report header and add the title to it.
Dim reportHeader As New ReportHeaderBand()
report.Bands.Add(reportHeader)
reportHeader.Controls.Add(label)
reportHeader.HeightF = label.HeightF
End Sub
Private Shared Sub CreateDetail(ByVal report As XtraReport)
' Create a new label bound to the CategoryName data field.
Dim labelDetail As New XRLabel()
labelDetail.Font = New Font("Tahoma", 10, FontStyle.Bold)
labelDetail.WidthF = 300.0F
' Bind the label to the CategoryName data field.
labelDetail.ExpressionBindings.Add(
New ExpressionBinding("BeforePrint", "Text", "'Category: ' + [CategoryName]"))
' Create a detail band and display the category name in it.
Dim detailBand As New DetailBand()
detailBand.Height = labelDetail.Height
detailBand.KeepTogetherWithDetailReports = True
report.Bands.Add(detailBand)
labelDetail.TopF = detailBand.LocationFloat.Y + 20F
detailBand.Controls.Add(labelDetail)
End Sub
#End Region
#Region "CreateDetailReport"
Private Shared Sub CreateDetailReport(ByVal report As XtraReport, ByVal dataMember As String)
' Create a detail report band and bind it to data.
Dim detailReportBand As New DetailReportBand()
report.Bands.Add(detailReportBand)
detailReportBand.DataSource = report.DataSource
detailReportBand.DataMember = dataMember
' Add a header to the detail report.
Dim detailReportHeader As New ReportHeaderBand()
detailReportBand.Bands.Add(detailReportHeader)
Dim tableHeader As New XRTable()
tableHeader.BeginInit()
tableHeader.Rows.Add(New XRTableRow())
tableHeader.Borders = BorderSide.All
tableHeader.BorderColor = Color.DarkGray
tableHeader.Font = New Font("Tahoma", 10, FontStyle.Bold)
tableHeader.Padding = 10
tableHeader.TextAlignment = TextAlignment.MiddleLeft
Dim cellHeader1 As New XRTableCell()
cellHeader1.Text = "Product Name"
Dim cellHeader2 As New XRTableCell()
cellHeader2.Text = "Unit Price"
cellHeader2.TextAlignment = TextAlignment.MiddleRight
tableHeader.Rows(0).Cells.AddRange(New XRTableCell() { cellHeader1, cellHeader2 })
detailReportHeader.Height = tableHeader.Height
detailReportHeader.Controls.Add(tableHeader)
' Adjust the table width.
AddHandler tableHeader.BeforePrint, AddressOf tableHeader_BeforePrint
tableHeader.EndInit()
' Create a detail band.
Dim tableDetail As New XRTable()
tableDetail.BeginInit()
tableDetail.Rows.Add(New XRTableRow())
tableDetail.Borders = BorderSide.Left Or BorderSide.Right Or BorderSide.Bottom
tableDetail.BorderColor = Color.DarkGray
tableDetail.Font = New Font("Tahoma", 10)
tableDetail.Padding = 10
tableDetail.TextAlignment = TextAlignment.MiddleLeft
Dim cellDetail1 As New XRTableCell()
Dim cellDetail2 As New XRTableCell()
cellDetail2.TextAlignment = TextAlignment.MiddleRight
cellDetail1.ExpressionBindings.Add(
New ExpressionBinding("BeforePrint", "Text", "[ProductName]"))
cellDetail2.ExpressionBindings.Add(
New ExpressionBinding("BeforePrint", "Text", "FormatString('{0:$0.00}', [UnitPrice])"))
tableDetail.Rows(0).Cells.AddRange(New XRTableCell() { cellDetail1, cellDetail2 })
Dim detailBand As New DetailBand()
detailBand.Height = tableDetail.Height
detailReportBand.Bands.Add(detailBand)
detailBand.Controls.Add(tableDetail)
' Adjust the table width.
AddHandler tableDetail.BeforePrint, AddressOf tableDetail_BeforePrint
tableDetail.EndInit()
' Create and assign different odd and even styles.
Dim oddStyle As New XRControlStyle()
Dim evenStyle As New XRControlStyle()
oddStyle.BackColor = Color.WhiteSmoke
oddStyle.StyleUsing.UseBackColor = True
oddStyle.Name = "OddStyle"
evenStyle.BackColor = Color.White
evenStyle.StyleUsing.UseBackColor = True
evenStyle.Name = "EvenStyle"
report.StyleSheet.AddRange(New XRControlStyle() { oddStyle, evenStyle })
tableDetail.OddStyleName = "OddStyle"
tableDetail.EvenStyleName = "EvenStyle"
End Sub
Private Shared Sub AdjustTableWidth(ByVal table As XRTable)
Dim report As XtraReport = table.RootReport
table.WidthF = report.PageWidth - report.Margins.Left - report.Margins.Right
End Sub
Private Shared Sub tableHeader_BeforePrint(ByVal sender As Object,
ByVal e As System.ComponentModel.CancelEventArgs)
AdjustTableWidth(TryCast(sender, XRTable))
End Sub
Private Shared Sub tableDetail_BeforePrint(ByVal sender As Object,
ByVal e As System.ComponentModel.CancelEventArgs)
AdjustTableWidth(TryCast(sender, XRTable))
End Sub
#End Region
End Class
End Namespace