ReportViewer-以编程方式生成报告 [英] ReportViewer - Programmatically generate report

查看:114
本文介绍了ReportViewer-以编程方式生成报告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用内置的Report Viewer控件生成我的自定义报告. Crystal Reports非常笨重,并且不能在所有客户端计算机上正常工作,因此,我尝试使用Microsoft Report.

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

因此,我的数据集称为程序",它包含一个带有名为"ProgramName"的列的数据表.我添加了程序的名称,最后返回了要在此处使用的数据集:

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()

我的名为"rptReport"的报告包含一个名为"programName"的参数字段.现在,我在测试"中编写它,并且可以正常工作.我的问题是,我希望它通过一个循环打印出所有程序名称,但是我不太确定该怎么做...

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...

推荐答案

以下是我的固定方式:

我使用以下方法调用"Developpement_GenerateNomDesc"方法:

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是我的ReportViewer控件名称.确保将参数添加到您的报告中.您可以使用Report.rdlc的UI来执行此操作.或者,您也可以通过编程方式做到,此处是一个很好的指针. /p>

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

这将使用数据集"dsPrograms"生成报告,以在report.rdlc中填写信息.使用我的类对象"clsProgram"填充数据集,该类对象包含有用的信息,例如名称,说明,DateCreated等.

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.

这篇关于ReportViewer-以编程方式生成报告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆