Reputation: 4938
I am trying to use the built-in Report Viewer control to generate my custom reports. Crystal Reports is heavy and doesn't work on all client computers therefore I'm giving the microsoft report build a try.
The goal of this report is to print a list of all programs. They aregotten from the database and stored in a list like so:
Private Function ProgramDataset() As DataSet
Dim ds As DataSet = New DataSet("Programs")
Dim allPrograms As List(Of clsProgram) = clsProgram.GetAll()
'Build datatable
Dim table1 As DataTable = New DataTable("Programs")
table1.Columns.Add("ProgramName")
For Each program As clsProgram In allPrograms
table1.Rows.Add(program.Name)
Next
' Create a DataSet. Put the table in it
ds.Tables.Add(table1)
Return ds
End Function
So my dataset is called "Programs" and it contains a DataTable with a column named "ProgramName". I add the name of the program and finally return the dataset to be used here:
Dim ds As DataSet = ProgramDataset()
Dim p As New ReportParameter("programName", "Test")
frmReportViewer.ReportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local
frmReportViewer.ReportViewer1.LocalReport.ReportPath = "..\..\Reports\rptReport.rdlc"
frmReportViewer.ReportViewer1.LocalReport.SetParameters(p)
frmReportViewer.ReportViewer1.LocalReport.DataSources.Clear()
frmReportViewer.ReportViewer1.LocalReport.DataSources.Add(New Microsoft.Reporting.WinForms.ReportDataSource("Programs", ds.Tables(0)))
frmReportViewer.ReportViewer1.DocumentMapCollapsed = True
frmReportViewer.ReportViewer1.RefreshReport()
frmReportViewer.Show()
My report named "rptReport" contains a parameter field named "programName". Right now I write in "Test" and it works. My issue is, I want it to print out all program names through a loop but I'm not quite sure how to go about doing that...
Upvotes: 2
Views: 30676
Reputation: 4938
Here is how I fixed it by the way:
I call my "Developpement_GenerateNomDesc" method using:
Public Sub ProgramDeveloppementNameDesc()
Dim rpJobNo = New ReportParameter("rpTitle", "Liste des programmes et leurs descriptions en développement")
Dim rpDate = New ReportParameter("rpDate", Date.Now())
Dim HeaderParams As ReportParameter() = {rpJobNo, rpDate}
Dim rvRDLC As New frmReportViewerRDLC
rvRDLC.Developpement_GenerateNomDesc("Developpement_rptNomDesc.rdlc", HeaderParams, "Developpement_rptNomDescDataset")
End Sub
rvRDLC is my ReportViewer control name. Make sure to add the parameters to your report. You can do this using the UI of the Report.rdlc. Or you can do it programmatically, here's a good pointer.
Public Sub Developpement_GenerateNomDesc(ByRef ReportName As String, ByVal HeaderParams As ReportParameter(), ByRef DataSourceName As String)
Dim ds As New dsPrograms
Dim sReportDataSource As ReportDataSource
Dim Programs = clsProgram.GetAll(0, False)
'Reset the viewer
rv.Reset()
rv.LocalReport.ReportEmbeddedResource = "GestionInformatique." & ReportName
rv.LocalReport.DataSources.Clear()
sReportDataSource = New ReportDataSource()
For Each param As ReportParameter In HeaderParams
rv.LocalReport.SetParameters(param)
Next
'Fill the datatable
For Each program As clsProgram In Programs
ds.dsProgramDetails.Rows.Add(program.Name, program.Description)
Next
sReportDataSource.Name = DataSourceName
sReportDataSource.Value = ds.dsProgramDetails
rv.LocalReport.DataSources.Add(sReportDataSource)
'rv.PrinterSettings.DefaultPageSettings.Landscape = True
rv.RefreshReport()
Me.Show()
End Sub
This generates a report using the DataSet "dsPrograms" to fill in the information in the report.rdlc. The dataset is populated using my class object "clsProgram" which contains useful information such as Name, Description, DateCreated and so on.
Upvotes: 1