报告服务在vb.net中 - 报告查看器

时间:2016-12-08 13:54:06

标签: .net

我的frmReports上有一个报表查看器。我创建了2个报告,Report1.rdlc和Report2.rdlc。我有一个强烈定义的DataSet - 每个报告分别有两个DataTables(1,2)。我试图在显示两个报告时使用相同的reportViewer。

目前我有两个按钮(每个报告1个),以便按下按钮 - 我查询SQL SERVER以获取数据并将其加载到每个DataTable中,就像这样..

    adapter = New SqlDataAdapter(sql, Con)
    adapter.Fill(ds)

    ds.Tables(0).TableName = "DataTable1"
    ReportViewer1.LocalReport.ReportEmbeddedResource = "WindowsApplication1.Report1.rdlc"
    DataTable1BindingSource.DataSource = ds
    ReportViewer1.RefreshReport()

我对Report2做了同样的事情,但使用DataTable2,我将EmbededResource更改为Report2,将DataTable绑定更改为DataTable2。

问题是,在运行我的应用程序之前必须在CHOOSE REPORT中预先选择其中一个报告 - 所以如果预先选择了Report1.rdlc - 那么当我调试它并运行Report1时它运行得非常好。但是,在这种情况下它不允许我运行Report2。

我尝试在Form_Load上使用这两个函数(在这种情况下,报表查看器为空,只有在用户点击任何一个按钮时才会填充。

ReportViewer1.Reset()
ReportViewer1.LocalReport.DataSources.Clear()

但它告诉我

  

尚未为数据源DataSet1提供数据源实例。

1 个答案:

答案 0 :(得分:0)

因为这似乎是一个问题,没有多少人知道解决方案.....这里就是这样。至少我是如何为可能遇到同样问题的其他人做的。

我创建了一个强烈定义的DataSet1 - 在其中我有DataTable1,其中包含我在查询中选择的确切字段。我也有ReportT的DataTable2。所以这段代码在大多数情况下是相同的 - 对于两个报告,我只更改对Report2和DataTable2的引用。

 Me.ReportViewer1.Reset()

 ReportViewer1.LocalReport.ReportEmbeddedResource = "WindowsApplication1.Report1.rdlc"
 sql = "SELECT RecBy, RecOn from tblNotes"

 adapter = New SqlDataAdapter(sql, Conn)
 adapter.Fill(ds, "DataTable1")

 Dim rds As ReportDataSource = New ReportDataSource("DataSet1", ds.Tables("DataTable1"))
 ReportViewer1.LocalReport.DataSources.Clear()
 ReportViewer1.LocalReport.DataSources.Add(rds)
 ReportViewer1.RefreshReport()

顶部需要这些......

Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.Reporting.WinForms