使用ReportViewer进行RDL报告的数据源

时间:2012-04-09 12:57:32

标签: asp.net reporting-services reportviewer rdl

我有一些使用SQL Server BI Development Studio创建的RDL报告,现在我需要使用ASP.NET Report Viewer来呈现它们。即使我的RDL包含对SQL服务器和SELECT查询的引用,它仍然说我需要为报告指定数据源。有没有办法让RDL使用数据源,还是必须通过C#代码将数据源传递给报表查看器?

谢谢。

2 个答案:

答案 0 :(得分:5)

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

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

Reporting Services and ReportViewer Controls in Visual Studio

修改
如何从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#,我使用Convert VB.NET to C#

答案 1 :(得分:1)

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

  

DataSourceReference元素可以包含完整的文件夹路径(for   例如,/ SampleReports / AdventureWorks)或相对路径(for   例如,AdventureWorks)。相对路径起始于同一文件夹   那个报告。共享数据源必须与服务器位于同一服务器上   报告。

验证DataSourceID。看看answer on this question。看起来它可能与您遇到的问题相同。

如果您使用的是RDLC,还可以使用ReportDataSource手动设置报告的数据源。以下示例中的“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,您可以follow the steps here。请注意,您需要重新创建数据源和查询信息。此外,XML模式定义在2005年和2008年之间是不同的。