2

組み込みのレポートビューアコントロールを使用して、カスタムレポートを生成しようとしています。Crystal Reportsは重く、すべてのクライアントコンピューターで機能するわけではないため、Microsoftレポートのビルドを試してみます。

このレポートの目的は、すべてのプログラムのリストを印刷することです。それらはデータベースから取得され、次のようにリストに保存されます。

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

したがって、私のデータセットは「Programs」と呼ばれ、「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」という名前のパラメータフィールドが含まれています。今、私は「テスト」で書きます、そしてそれは働きます。私の問題は、ループを介してすべてのプログラム名を出力したいのですが、それを実行する方法がよくわかりません...

4

1 に答える 1

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を使用して実行できます。または、プログラムでそれを行うことができます。ここに良いポインタがあります。

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に情報が入力されます。データセットは、Name、Description、DateCreatedなどの有用な情報を含むクラスオブジェクト「clsProgram」を使用して入力されます。

于 2013-04-19T14:57:04.600 に答える