我正在尝试使用内置的Report Viewer控件来生成自定义报告。 Crystal Reports很重,并不适用于所有客户端计算机,因此我正在试用微软报告。
此报告的目标是打印所有程序的列表。它们从数据库中被遗忘并存储在如下列表中:
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
因此我的数据集称为“程序”,它包含一个名为“ProgramName”的列的DataTable。我添加程序的名称,最后返回要在此处使用的数据集:
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()
我的名为“rptReport”的报告包含一个名为“programName”的参数字段。现在我写“测试”,它的工作原理。我的问题是,我希望它通过循环打印出所有程序名称,但我不太确定如何去做...
答案 0 :(得分:1)
以下是我修复它的方式:
我使用以下方法调用我的“Developpement_GenerateNomDesc”方法:
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是我的ReportViewer控件名称。确保将参数添加到报告中。您可以使用Report.rdlc的UI执行此操作。或者你可以通过编程方式完成,here是一个很好的指针。
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
这将使用DataSet“dsPrograms”生成报告以填写report.rdlc中的信息。使用我的类对象“clsProgram”填充数据集,其中包含有用的信息,如Name,Description,DateCreated等。