Erweiterungen für den Report-Designer
Es gibt zwei wesentliche und mächtige Möglichkeiten, mit denen die Funktionalität des integrierten Report-Designers deutlich erweitert werden kann. Zum einen lassen sich eigene Funktionen erstellen und über ein gewisses Ereignis einbinden, die dann wiederum im Designer zur Verfügung stehen. Darüber hinaus können eigene Datenquellen für bestimmte Reports eingestellt werden, so dass die Daten nicht der Menüfunktion und der dahinterstehenden Tabelle sowie den per 'Designer-Tabellen' angebundenen Tabellen entnommen werden, sondern statt dessen eine in .NET gestaltete Datenquelle (Tabelle, Liste, ...) verwendet wird. Zum Ausprobieren ist der Code aus den unteren Beispielen in die Datei 'TriggerFormFramework.vb' einzufügen.
Eigene Datenquelle (Tabelle, Liste etc.) verwenden
Eine eigene Datenquelle kann über das Ereignis 'LLSetzeDataSource' in der Klasse 'TriggerFormFramework' eingestellt werden. Damit diese auch verwendet wird, ist in easyWinArt am entsprechenden Report-Eintrag im Drucken-Fenster der Haken 'Optionale Datenquelle' einzustellen und der Haken 'Erweiterte Datenquelle' zu deaktivieren. Im Ereignis wird wie gewohnt eingeschränkt, um welche Menüfunktion es geht, so dass man je nach Menüfunktion verschiedene Unterfunktionen mit verschiedenen anzubindenden Datenquellen programmieren kann.
Das dargestellte Beispiel zeigt auf, wie für die Menüfunktion 'Artikel' eine generische Liste als eigene Datenquelle hinzugefügt wird. Da hier keine weiteren Einschränkungen gegeben sind, gilt dies für alle Reports, sowohl unter 'Drucken' als auch unter 'Listen'.
VB.NET SDK-Programmcode: Beispiel 1
#Region " LLSetzeDataSource-Ereignis "
Private Sub TriggerFormFramework_LLSetzeDataSource(ByVal sender As Object, ByVal e As FormFrameworkLLEventArgs) Handles Me.LLSetzeDataSource
'>>> A R T I K E L
If TypeOf sender Is ArtikelFRM Then
'>>> Beispiel-Liste erstellen
Dim meineListe As New List(Of String)
meineListe.Add("Auto 123")
meineListe.Add("Bahn 456")
'>>> Liste als Datenquelle dem Formular Artikel (Auslöser des Ereignisses) zuordnen
e.LL.DataSource = meineListe
End If
End Sub
#End Region
Das zweite Beispiel enthält eine weitere Einschränkung. So soll die Datenquelle nur für einen ganz bestimmten Report gelten. Dies kann man z.B. über die Druck-Parameter einschränken, aber auch andere Möglichkeiten sind denkbar, z.B. über den Namen der Liste ('e.LL.EwaAnzeige'). Der Report muss im Druck-Fenster entsprechend eingestellt sein.
VB.NET SDK-Programmcode: Beispiel 2
#Region " LLSetzeDataSource-Ereignis "
Private Sub TriggerFormFramework_LLSetzeDataSource(ByVal sender As Object, ByVal e As FormFrameworkLLEventArgs) Handles Me.LLSetzeDataSource
'>>> A D R E S S E N - Menüfunktion
If TypeOf sender Is AdressenFRM Then
'>>> Diese Datenbindung nur für den Report-Eintrag mit dem entsprechenden Wert im DruckParameter1
If e.LL.EwaDruckParameter1 = "Meine-Adress-Liste" Then
'>>> Tabelle bilden mit den Daten
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
Dim tmpSQL As String = "SELECT " & TBL.Adressen.AdressNummerINT & _
", " & TBL.Adressen.FirmenNameVC & _
", " & TBL.Adressen.OrtVC & _
" FROM " & TBL.Adressen.TBL & _
" WHERE " & TBL.Adressen.PlzVC & " LIKE '4%'"
Dim tmpTable As DataTable = tmpDBZ.BildeDataTableSQL(tmpSQL, TBL.Adressen.TBL)
'>>> Liste als Datenquelle dem Formular Artikel (Auslöser des Ereignisses) zuordnen
e.LL.DataSource = tmpTable
End If
End If
End Sub
#End Region
Report-Eintrag-Typen
Typ | Kürzel | AnwenderReport | OriginalReport | easyWinArtFlag |
---|---|---|---|---|
Original-easyWinArt-Report | ORG | False | True | True |
Modifizierter Original-easyWinArt-Report | MOD | True | True | True |
Verweis auf Original-easyWinArt-Report | U-ORG | False | True | False |
Anwender-Report | USER | True | False | False |
Verweis auf Anwender-Report | USER | True | False | False |