0

我创建了一个数据集,其中包含我的 SQL 数据库中名为“BillHeaders”的表

这是我的报告查看器的样子,它将包含两个报告。一个包含工作编号和描述,另一个包含工作编号、描述和合同编号。 报告查看器

这是我将执行任一报告的按钮

两种类型的报告

这是我的“报告”文件夹中的报告。两者都已构建并准备就绪。 报告文件夹

不幸的是,当我使用此代码时(分别针对每个按钮):

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 回答