This repository has been archived by the owner on Oct 2, 2023. It is now read-only.
/
Form1.vb
102 lines (97 loc) · 4.12 KB
/
Form1.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
Imports Microsoft.VisualBasic
Imports System
Imports System.ComponentModel
Imports System.IO
Imports System.Reflection
Imports System.Windows.Forms
Imports DevExpress.Xpo
Imports DevExpress.Xpo.DB
Imports DevExpress.XtraReports
Imports DevExpress.XtraReports.Extensions
Imports DevExpress.XtraReports.UI
' ...
Namespace WindowsApplication54
Partial Public Class Form1
Inherits Form
Shared Sub New()
' The following code is required to support serialization of multiple custom objects.
TypeDescriptor.AddAttributes(GetType(XPCollection), New ReportAssociatedComponentAttribute())
' The following code is required to serialize custom objects.
ReportExtension.RegisterExtensionGlobal(New ReportExtension())
ReportDesignExtension.RegisterExtension(New DesignExtension(), ExtensionName)
Dim fileName As String = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) & "\person.mdb"
If (Not File.Exists(fileName)) Then
Dim session As UnitOfWork = CreateSessionByName("person.mdb")
If New XPCollection(Of Person)(session).Count < 6 Then
Person.Create(session, "Name1")
Person.Create(session, "Name2")
Person.Create(session, "Name3")
Person.Create(session, "Name4")
Person.Create(session, "Name5")
Person.Create(session, "Name6")
session.CommitChanges()
End If
End If
End Sub
Private Shared Function CreateSessionByName(ByVal name As String) As UnitOfWork
Dim connectionString As String = AccessConnectionProvider.GetConnectionString(name)
Return CreateSession(connectionString)
End Function
Private Shared Function CreateDataSource(ByVal session As UnitOfWork) As XPCollection(Of Person)
Return New XPCollection(Of Person)(session)
End Function
Public Shared Function CreateSession(ByVal connectionString As String) As UnitOfWork
Dim result As New UnitOfWork()
result.ConnectionString = connectionString
Return result
End Function
Private Const ExtensionName As String = "Custom"
Public Sub New()
InitializeComponent()
End Sub
Private Sub createReportWhithDataSourceButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles createReportWhithDataSourceButton.Click
Using session As UnitOfWork = CreateSessionByName("person.mdb")
Dim report As New XtraReport()
ReportDesignExtension.AssociateReportWithExtension(report, ExtensionName)
report.DataSource = CreateDataSource(session)
report.ShowDesignerDialog()
End Using
End Sub
Private Sub createEmptyReportButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles createEmptyReportButton.Click
CType(New XtraReport(), XtraReport).ShowDesignerDialog()
End Sub
Private Class ReportExtension
Inherits ReportStorageExtension
Public Overrides Sub SetData(ByVal report As XtraReport, ByVal stream As Stream)
report.SaveLayoutToXml(stream)
End Sub
Public Overrides Sub SetData(ByVal report As XtraReport, ByVal url As String)
report.SaveLayoutToXml(url)
End Sub
End Class
Private Class DesignExtension
Inherits ReportDesignExtension
Protected Overrides Function CanSerialize(ByVal data As Object) As Boolean
Return TypeOf data Is XPCollection(Of Person)
End Function
Protected Overrides Function SerializeData(ByVal data As Object, ByVal report As XtraReport) As String
Dim collection As XPCollection(Of Person) = TryCast(data, XPCollection(Of Person))
If collection IsNot Nothing Then
Return collection.Session.ConnectionString
End If
Return MyBase.SerializeData(data, report)
End Function
Protected Overrides Function CanDeserialize(ByVal value As String, ByVal typeName As String) As Boolean
Return GetType(XPCollection(Of Person)).FullName = typeName
End Function
Protected Overrides Function DeserializeData(ByVal value As String, ByVal typeName As String, ByVal report As XtraReport) As Object
If GetType(XPCollection(Of Person)).FullName = typeName Then
Dim result As New XPCollection(Of Person)()
result.Session = Form1.CreateSession(value)
Return result
End If
Return MyBase.DeserializeData(value, typeName, report)
End Function
End Class
End Class
End Namespace