在VB.Net中手动在Reportviewer中加载.rdlc报告

bon*_*nny 5 .net vb.net report rdlc winforms

我在Reportviewer中需要认真的帮助。
我看到了很多链接,尝试了很多代码,但找不到合适的解决方案。请甚至让我理解并清除我的疑问。
完全困惑在代码中选择哪个数据集,什么是datasource.value东西,每次都会给我错误...

我正在展示如何创建报告并尝试使其工作的步骤。这是因为我在创建报告时可能犯了任何错误,并且您可能会发现他们。

现在,下面将描述问题,我有许多.rdlc报告我的项目。我所做的是

注意:包含表单名称的Reportviewer是Reports.vb
RDLC报表是Reports1.rdlc,Report2.rdlc,...

1)创建的报告,例如添加->新项目->报告->报告-> Report1.rdlc
报告名称:Report1.rdlc

2)然后我从这里像这样添加数据集……

在此处输入图片说明

3)DataSet属性打开,它甚至会打开DataSource配置向导。我选择存储过程是因为我想从存储过程中获取数据,然后按Finish。
这里的数据集名称是BonnyDataSet

在此处输入图片说明

4)之后,我从数据集属性中选择数据源...
现在最后一个可用的数据集是什么... ???
以及在ReportViewer中加载时必须考虑的数据集?

在此处输入图片说明

5)现在,我通过添加数据集1的数据列来组织该列,如下所示……

在此处输入图片说明

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
Run Code Online (Sandbox Code Playgroud)

我收到如下错误:

BC30311:无法将类型'ReportDataSource'的值转换为'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")
Run Code Online (Sandbox Code Playgroud)

这里的错误显示如下:

BC30311:“ LocalReport”类型的值不能转换为“ LocalReport”。

我尝试了许多其他方法,但无法理解问题所在。创建.rdlc报告期间我做错什么了吗???

急需帮助。谢谢

Rez*_*aei 5

您应该考虑以下注意事项:

  1. 你有一个编译时错误说:

    BC30311:“ReportDataSource”类型的值无法转换为“ReportDataSource”

    因此,您应该检查是否使用了正确的引用ReportDataSource并使用了来自正确命名空间的类。一个常见的问题是,当您Microsoft.Reporting.WebForms.dll在 Windows 窗体项目中添加为引用并添加Import Microsoft.Reporting.WebForms命名空间时,您会收到此类异常。

  2. 修复后,您应该注意DataSet报告中的名称应与您在创建新ReportDataSource. 例如,如果名称DataSetDataSet1,则应使用以下代码:

    Dim rds = New ReportDataSource("DataSet1", data)
    
    Run Code Online (Sandbox Code Playgroud)
  3. data要传递给报告应当在其中使用的报告相同的结构。例如,它应该是 a 的一个实例DataTable

    TableAdapter1.Fill(Me.DataSet1, "Table1")
    Dim rds = New ReportDataSource("DataSet1", Me.DataSet1.Table1)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在设置您使用的报告时,请使用正确的资源名称。例如,如果您Report1在项目的根目录中有一个,并且项目的默认 namspace 是YourProjectNamespace那么资源名称将是:

    ReportViewer.LocalReport.ReportEmbeddedResource = "YourProjectNamespace.Report1.rdlc"
    
    Run Code Online (Sandbox Code Playgroud)

    当您的报表位于文件夹中时,文件夹名称也将添加到其资源名称中。