Archief - [PROG][C# - CR] Automatisch genereren van Crystal Reports

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Gert7

Legacy Member
Hallo iedereen,

Ik heb een applicatie geschreven waarbij je door het klikken op een button een Crystal Report kunt genereren. Na het klikken op deze button dient er echter nog een parameter opgegeven te worden. In mijn geval is dit een datum.

Op basis van dezelfde parameter dien ik zo 9 crystal reports te genereren, op te slaan als .pdf en eventueel deze .pdf's te printen.

Momenteel ben ik op zoek naar informatie zodat ik deze handeling (9 verschillende buttons klikken) kan vereenvoudigen.

En wel op volgende manier:
Gebruiker klikt op button en moet éénmalig een datum meegegeven, vervolgens worden er 9 verschillende crystal reports gemaakt met dezelfde parameter en automatisch opgeslaan als .pdf op een specifieke locatie.

Heeft er iemand hier ervaring mee of kan er iemand mij op weg helpen?

Alvast bedankt!


Mvg


GV

Obliv`

Legacy Member
Ik veronderstel dat je al een Crystal Report hebt, dat je het kan oproepen in de designer en dat je een WinForm hebt met een ReportViewer die als datasource jouw report heeft.

Stap 1 - maak een interface zodat je die 9 reports op dezelfde manier kan benaderen
Code:
Public Interface IMyReport
   LoadReport(myParam As System.DateTime)
   SaveReport(pathWhereToSaveReport As String)
End Interface

Stap 2 - laat de forms waarop je reportviewer staat de interface implementeren
Code:
 Private Sub LoadReport(dateTime As System.DateTime) Implements IMyReport.LoadReport
   Dim myParameterFields As CrystalDecisions.Shared.ParameterFields = Nothing

   Me.MyCrystalReportViewer.ReportSource = Me.MyCrystalReport
   myParameterFields = Me.MyCrystalReportViewer.ParameterFieldInfo
   myParameterFields(0).CurrentValues.AddValue(dateTime)
   Me.MyCrystalReport.SetDatabaseLogon("[userOmNaarDbTeConnecteren]",[Password])
End Sub

Public Sub SaveReport(ByVal path As String) Implements IMyReport.SaveReport
   Me.MyCrystalReport.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, path & "/" & [gegenereerde filename] & ".pdf")
End Sub

Stap 3 - opvragen van de locatie om te saven
Code:
Dim pathWhereToSaveReports As String = Nothing
Dim folderBrowserDialog As System.Windows.Forms.FolderBrowserDialog = New System.Windows.Forms.FolderBrowserDialog

folderBrowserDialog.RootFolder = Environment.SpecialFolder.MyComputer
folderBrowserDialog.ShowNewFolderButton = True

If folderBrowserDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
   pathWhereToSaveReports = folderBrowserDialog.SelectedPath
End If

Stap 4 - opvragen van uw parameter
Code:
Zal wel lukken zeker?

Stap 5 - Zet je 9 reports in een generic list zodat je erover kan lopen
Code:
Dim reportList as System.Collections.Generic.List(Of IMyReport) = New System.Collections.Generic.List(Of IMyReport)
Dim myReport As IMyReport = Nothing

reportList.Add(report1 As New Report1)
reportList.Add(report2 As New Report2)
...
reportList.Add(report9 As New Report9)

For Each myReport In reportList
   myReport.Load(uwParameterUitStap4)
   myReport.Save(pathWhereToSaveReports)
End For

Ik heb alles hier ingetypt, dus er kunnen nog wel wat fouten in zitten. Als je uw report ook wil afdrukken kan je in de SaveReport functie ook Me.MyCrystalReport.PrintToPrinter(x,x,x,x) oproepen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan