在 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中如何编写限制软件的使用时间?

在 vb.net 中保存和加载游戏

在 vb.net 中使用 vb6 ocx 控件时无法加载文件或程序集“Interop.VBRUN”

模拟链接点击webbrowser控件vb.net

使用 VB.NET 应用程序手动创建 MySQL 触发器(语法错误)

VB.NET CAD开发求助加载程序后如何设置为当前