我创建了一个数据集,其中包含一个名为“BillHeaders”
的SQL数据库中的表以下是我的报告查看器的外观,它将包含两个报告。一个持有工号和描述,另一个持有工号,描述和合同号。
以下是我的按钮,它们将执行报告
以下是我的“报告”文件夹中的报告。两者都构建好并准备好了。
当我使用此代码(分别为每个按钮)时,不幸的是:
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
我得到了这个结果:
我的数据源出了什么问题?
答案 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上的报告名称和必要时的数据集来生成多个表单。