在 VB.Net 中手动加载 Reportviewer 中的 .rdlc 报告
Posted
技术标签:
【中文标题】在 VB.Net 中手动加载 Reportviewer 中的 .rdlc 报告【英文标题】:Loading .rdlc report in Reportviewer manually in VB.Net 【发布时间】:2017-02-24 16:39:28 【问题描述】:我在 reportviewer 中需要认真的帮助。 我看到了很多链接,尝试了很多代码,但找不到合适的解决方案。 请让我理解并消除我的疑虑。 完全混淆了在代码期间选择哪个数据集以及什么是 datasource.value 东西,每次都会给我错误...
我正在展示我如何创建报告并尝试使其发挥作用的步骤。这是因为我可能在创建报告时犯了任何错误,而你们可能会发现它。
现在问题描述如下, 我有很多 .rdlc 报告我的项目。 我所做的是
注意:包含表单名称的 Reportviewer 是 Reports.vb RDLC 报告是 Reports1.rdlc,Report2.rdlc,...
1) 创建报告,例如添加 -> 新项目 -> 报告 -> 报告 -> Report1.rdlc 报告名称:Report1.rdlc
2) 然后我像这样从这里添加数据集……
3) 数据集属性打开,它甚至打开数据源配置向导。 我选择存储过程是因为我想从存储过程中获取数据并按下完成。 这里的数据集名称是 BonnyDataSet
4) 之后,我从数据集属性中选择数据源... 现在这个可用的数据集最后在这里是什么......??? 在 ReportViewer 中加载时我必须考虑哪个数据集???
5) 现在我通过添加如下所示的 dataset1 中的数据列来组织列...
6) 现在我在 Reports.vb 表单中添加了 Reportviewer 并尝试了很多代码......。 在这里展示其中的一些。
Private Sub Reports_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
'Select Case PubRepVar
'Case "AccMast"
Dim data As New BonnyDataSet
Dim rds = New ReportDataSource("BonnyDataSet", data)
ReportViewer.LocalReport.DataSources.Clear()
ReportViewer.LocalReport.DataSources.Add(rds) ‘------error here
ReportViewer.LocalReport.ReportEmbeddedResource = "YourProjectNamespace.Report1.rdlc"
ReportViewer.RefreshReport()
'End Select
Catch ex As Exception
MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
我得到如下错误:
BC30311:“ReportDataSource”类型的值无法转换为 '报告数据源'
我不知道这个错误。
我尝试的另一个代码是 ReportViewer.ProcessingMode = ProcessingMode.Local
Dim localReport As LocalReport
localReport = ReportViewer.LocalReport ‘-------error here
localReport.ReportEmbeddedResource =
"ReportViewerIntro.Report1.rdlc"
Dim dataset As New DataSet("BonnyDataSet")
这里的错误显示如下:
BC30311:“LocalReport”类型的值无法转换为 '本地报告'。
我尝试了许多其他方法,但无法理解问题所在。 我在创建 .rdlc 报告期间是否做错了什么???
急需帮助。谢谢
【问题讨论】:
你试过Dim rds = New ReportDataSource("DataSet1", data)
数据也应该是BonnyDataSet.AccMast_AllDetail
的结果。
不,没有发生,我试过这个Dim data = BonnyDataSet.AccMast_AllDetail
不工作。没有任何工作。它说值类型 ReportDataSource 无法转换为 ReportDataSource... 现在这是什么? @RezaAghaei
您导入的命名空间是什么?
肯定会抛出异常,正如我所说的数据应该是those data BonnyDataSet.AccMast_AllDetail
的结果,创建一个数据集的实例然后调用ds1.AccMast_AllDetail
,如果有参数,它似乎被存储程序。我无法测试它是如何工作的,但可以使用它和使用数据来获取数据。就是这样。
【参考方案1】:
您应该考虑以下注意事项:
你有一个编译时错误说:
BC30311:“ReportDataSource”类型的值无法转换为 '报告数据源'
因此,您应该检查您是否使用了正确的 ReportDataSource
引用并使用了正确命名空间中的类。一个常见的问题是当您在 Windows 窗体项目中添加 Microsoft.Reporting.WebForms.dll
作为引用并添加 Import Microsoft.Reporting.WebForms
命名空间时,您将收到此类异常。
修复该问题后,您应注意报告中的DataSet
名称应与创建新ReportDataSource
时使用的名称相同。例如DataSet
的名字是DataSet1
,你应该使用这样的代码:
Dim rds = New ReportDataSource("DataSet1", data)
您要传递给报告的data
应该与报告使用的结构相同。例如,它应该是 DataTable
的一个实例:
TableAdapter1.Fill(Me.DataSet1, "Table1")
Dim rds = New ReportDataSource("DataSet1", Me.DataSet1.Table1)
在设置您使用的报告时,请使用正确的资源名称。例如,如果您在项目的根目录中有 Report1
,并且项目的默认名称空间是 YourProjectNamespace
,那么资源名称将是:
ReportViewer.LocalReport.ReportEmbeddedResource = "YourProjectNamespace.Report1.rdlc"
当您的报告位于文件夹中时,文件夹名称也将添加到其资源名称中。
【讨论】:
以上是关于在 VB.Net 中手动加载 Reportviewer 中的 .rdlc 报告的主要内容,如果未能解决你的问题,请参考以下文章
在 vb.net 中使用 vb6 ocx 控件时无法加载文件或程序集“Interop.VBRUN”