具有报表查看器的 RDL 报表的数据源



我有一些使用 SQL Server BI Development Studio 创建的 RDL 报表,现在我需要使用 ASP.NET 报表查看器呈现它们。尽管我的 RDL 包含对 SQL 服务器和 SELECT 查询的引用,但它一直说我需要为报表指定数据源。是否有办法使 RDL 中的数据源得以使用,或者是否必须通过 C# 代码将数据源传递给报表查看器?

谢谢。

我想您正在本地模式下使用报告查看器:

viewer.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local

你用viewer.LocalReport.在这种情况下,您必须自己运行查询并将结果传递给查看器:

dim tbl as new DataTable()

填写数据,例如tbl.load(datareader)。

Dim VDS As New ReportDataSource
VDS.Name = "Your Data Source Name"
VDS.Value = tbl
viewer.LocalReport.DataSources.Add(VDS)

如果要使用服务器模式

viewer.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Remote

你必须使用viewer.ServerReport

viewer.ServerReport.ReportServerUrl = New Uri(ReportServerURL)

可能viewer.ServerReport.SetDataSourceCredentials

Visual Studio 中的 Reporting Services 和 ReportViewer 控件

编辑
如何从 rdl
获取查询初始化:

Dim XRep As New XmlDocument
XRep.Load(ReportPath)
Dim xmlnsManager As New System.Xml.XmlNamespaceManager(XRep.NameTable)
dim DefaultNSURI as string = XRep.GetElementsByTagName("Width")(0).NamespaceURI
xmlnsManager.AddNamespace("rep", DefaultNSURI)

数据集处理:

For Each nd As XmlNode In XRep.SelectNodes("/rep:Report/rep:DataSets/rep:DataSet", xmlnsManager)
   'DataSourceName can be used to find iformation about connection' 
   Dim DataSourceName As String = nd.SelectSingleNode("rep:Query/rep:DataSourceName", xmlnsManager).InnerText  
   Dim DSName As String = nd.Attributes("Name").Value       
   cmd.CommandText = nd.SelectSingleNode("rep:Query/rep:CommandText", xmlnsManager).InnerText
   Dim tbl As New DataTable(DSName)
   tbl.Load(cmd.ExecuteReader)
    'The table created here is to be passed to  LocalReport as datasource'
 Next

注意要转换 vb.net<->c#,我使用将 VB.NET 转换为 C#

您是否验证了 RDL 中的 DataSourceReference 元素?它需要报表服务器的路径。

元素可以包含完整的文件夹路径(对于 例如,/SampleReports/AdventureWorks)或相对路径(用于 例如,冒险作品)。相对路径从与 相同的文件夹中开始 报告。共享数据源必须与 报告。

还要验证数据源 ID。看看这个问题的答案。看起来这可能是您遇到的相同问题。

如果使用 RDLC,还可以使用报表数据源手动设置报表的数据源。以下示例中的"GetMyData"将实现 IEnumerable 或 IDataSource。

ReportDataSource reportDataSource = new ReportDataSource("MyDataName", GetMyData(startAt, endAt));
ReportViewer1.LocalReport.DataSources.Add(reportDataSource);
ReportViewer1.LocalReport.ReportPath = Server.MapPath("~/Reporting/MyReport.rdlc");
ReportParameterCollection col = new ReportParameterCollection();
ReportParameter startAtParam = new ReportParameter("StartAt", startAt.ToString("MMM, dd yyyy"));
col.Add(startAtParam);
ReportParameter endAtParam = new ReportParameter("EndAt", endAt.ToString("MMM, dd yyyy"));
col.Add(endAtParam);
ReportViewer1.LocalReport.SetParameters(col);   

如果要将 RDL 转换为 RDLC,可以按照此处的步骤操作。请注意,您需要重新创建数据源和查询信息。此外,XML 架构定义在 2005 年和 2008 年之间有所不同。

最新更新