0

「BillHeaders」という名前の SQL データベースのテーブルを含むデータセットを作成しました

レポート ビューアーは次のようになります。2 つのレポートが含まれます。1 つはジョブ番号と説明を保持し、もう 1 つはジョブ番号、説明、および契約番号を保持します。 レポート閲覧者

いずれかのレポートを実行するボタンは次のとおりです

2種類のレポート

「Reports」フォルダにあるレポートは次のとおりです。どちらも構築済みで、すぐに使用できます。 レポート フォルダ

残念ながら、このコードを使用すると(それぞれボタンごとに):

Private Sub btnJobNoDesc_Click(sender As System.Object, e As System.EventArgs) Handles btnJobNoDesc.Click
    'Reset the viewer
    frmReportViewer.ReportViewer1.Reset()

    'Dim the required datasources. Need a seperate ReportDatasource for each table in the report
    Dim ReportDataSource1 As Microsoft.Reporting.WinForms.ReportDataSource = New Microsoft.Reporting.WinForms.ReportDataSource

    'Give datasource name and set the specific datatables
    ReportDataSource1.Name = "dsBillHeaders_BillHeaders"
    ReportDataSource1.Value = frmReportViewer.dsBillHeaders.BillHeaders

    'Clear the datasources in the report and add the new ones
    frmReportViewer.ReportViewer1.LocalReport.DataSources.Clear()
    frmReportViewer.ReportViewer1.LocalReport.DataSources.Add(ReportDataSource1)

    frmReportViewer.ReportViewer1.LocalReport.ReportEmbeddedResource = "ReportViewer_Tutorial.rptJobNoDesc.rdlc"
    frmReportViewer.ReportViewer1.RefreshReport()

    frmReportViewer.Show()
End Sub

私はこの結果を得ます: 結果

データソースのどこが間違っていますか?

4

2 に答える 2

2

処理モードをローカルに設定していない場合

レポートを作成するときに、レポート内のデータソース名がデータセットのテーブル名に対応していることを確認します。それが必要かどうかはわかりませんが、物事をよりシンプルに保ちます。

       _reportViewerNewContracts.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local
        _reportViewerNewContracts.LocalReport.ReportPath = "Reports\NewContractsReport.rdlc"

        Dim reportDataSource1 As New Microsoft.Reporting.WinForms.ReportDataSource()
        reportDataSource1.Name = _contractDataset.NewContracts.TableName
        'Name of the report dataset in our .RDLC file
        reportDataSource1.Value = _contractDataset.NewContracts

        Me._reportViewerNewContracts.LocalReport.DataSources.Add(reportDataSource1)
        'fill data 
        _reportViewerNewContracts.RefreshReport()

(データセット名にアンダースコアを付けたテーブル名を推奨するサイトをたくさん見ましたが、うまくいきませんでした)

于 2013-02-19T18:54:10.707 に答える
1

これが私が理解したものです:

Private Sub btnJobNoDesc_Click(sender As System.Object, e As System.EventArgs) Handles btnJobNoDesc.Click
    'Reset the form
    Dim rv As New frmReportViewer

    'Reset the viewer
    rv.ReportViewer1.Reset()

    Dim ds As New dsBillHeaders
    Dim ta As New dsBillHeadersTableAdapters.BillHeadersTableAdapter
    ta.Fill(ds.BillHeaders)

    rv.ReportViewer1.LocalReport.ReportEmbeddedResource = "ReportViewer_Tutorial.rptJobNoDesc.rdlc"
    rv.ReportViewer1.LocalReport.DataSources.Clear()
    Dim sReportDataSource As ReportDataSource
    sReportDataSource = New ReportDataSource()
    sReportDataSource.Name = "dsBillHeaders"
    sReportDataSource.Value = ds.BillHeaders
    rv.ReportViewer1.LocalReport.DataSources.Add(sReportDataSource)

    rv.ReportViewer1.RefreshReport()
    rv.Show()
End Sub

このコードを使用すると、ReportEmbeddedResource、sReportDataSource.Value、および必要に応じてデータセットのレポートの名前を変更するだけで、複数のフォームを生成できます。

于 2013-02-19T20:36:33.373 に答える