Reportviewer缺少数据源

时间:2013-02-19 18:07:27

标签: vb.net datasource reportviewer

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

的SQL数据库中的表

以下是我的报告查看器的外观,它将包含两个报告。一个持有工号和描述,另一个持有工号,描述和合同号。 Reportviewer

以下是我的按钮,它们将执行报告

Two types of reports

以下是我的“报告”文件夹中的报告。两者都构建好并准备好了。 Reports folder

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

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

我得到了这个结果: Result

我的数据源出了什么问题?

2 个答案:

答案 0 :(得分: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()

(我看过很多网站建议使用数据集名称下划线表名,但这对我来说从未起作用)

答案 1 :(得分: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上的报告名称和必要时的数据集来生成多个表单。