2013-02-19 123 views
0

我创建了包含一个表从我的SQL数据库名为“BillHeaders”的ReportViewer缺少数据源

这里是我的报表浏览器是什么样子,它将包含两份报告的数据集。一个包含工作编号和说明,另一个包含工作编号,说明和合同编号。 Reportviewer

这里是我的按钮,将执行要么报告

Two types of reports

这里是我的报告,我在“报告”的文件夹。两者都构建并准备好去。 Reports folder

Unfortuantely当我使用此代码(分别为每个按钮):

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

我在做什么毛病我的数据源?

回答

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和数据集上的报告名称(如有必要)即可生成多个表单。

+1

是“dsBillHeaders”数据集名称吗?或表名。 – PatFromCanada 2013-02-20 12:51:02

+0

dsBillHeaders是Tablix的数据集名称:) – Alex 2013-02-20 14:30:23

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

(我见过很多是建议DatasetName来下划线表名的网站,但从来没有为我工作)

+0

感谢您的回复:)我只是想出了另一种方式。我会将它作为答案发布 – Alex 2013-02-19 20:35:25