如何使用VB.NET动态更改RDLC报表中的数据源?

问题描述 投票:0回答:1

我想创建一个包含来自我的 Google 工作表数据的订单数据的报告,并通过报告查看器控件显示此报告。我正在使用 Microsoft 报告 rdlc 扩展来创建它。

因为 Google 工作表数据不是关系数据库,所以我使用对象创建了一个虚拟数据集(我创建了一个具有 2 个属性的简单类:OrderID 和 OrderName),并将 tablix 与数据集连接起来。

但是由于用户的选择,我想动态地将行或列添加到 tablix,因此我正在尝试为 reportviewer 控件创建一个新的数据源。问题是当我的代码中的数据源名称与 2report.rdlc 文件中的数据源(“DataSet1”)匹配时,它起作用了。但是,如果我尝试创建一个具有不同名称(如“NewData”)的新数据源,则会出现如下错误:“数据源实例尚未分配给数据集‘Dataset1’”。

我做错了什么吗? 如果您有任何想法,请告诉我。

提前致谢。

这是我的代码:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


    ' Create a new DataTable object
    Dim dataTable As New DataTable("myTable")
    Dim dtSet As New DataSet("NewdtSet")

    ' Add columns to the DataTable
    dataTable.Columns.Add("OrderID", GetType(Integer))
    dataTable.Columns.Add("OrderName", GetType(String))
    dataTable.Columns.Add("OrderContent", GetType(String))

    ' Add rows to the DataTable
    dataTable.Rows.Add(1, "Row1")
    dataTable.Rows.Add(2, "Row2")
    dataTable.Rows.Add(3, "Row3", "ABCMartShoes")
    dtSet.Tables.Add(dataTable)
    Dim dataSource As New ReportDataSource("DataNew", dtSet.Tables("myTable"))

    ReportViewer1.LocalReport.DataSources.Clear()

    ReportViewer1.LocalReport.DataSources.Add(dataSource)

    Me.ReportViewer1.RefreshReport()
End Sub

这是我的虚拟数据集

更新: 这是我运行上面的代码时的报告 tablix(我将 ReportDataSource 名称更改为“DataSet1”)。大家可以看到,我尝试添加新的列“Order Content”,但是没有显示在报告中

vb.net rdlc reportviewer
1个回答
0
投票

您需要确保在 RDLC 文件中定义的数据集包含两个表的所有字段。字段不必在报告中实际使用,只需定义即可。因此,当您更改为 DataNew 表时,字段 OrderContent 位于 RDLC 文件中。如果你这样做,你需要做的就是解决以下问题:

Dim dataSource As New ReportDataSource("DataNew", dtSet.Tables("myTable"))

Dim dataSource As New ReportDataSource("DataSet1", dtSet.Tables("myTable"))
© www.soinside.com 2019 - 2024. All rights reserved.