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

Joa*_*ujo 1 asp.net reportviewer rdl reporting-services

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

谢谢.

Iva*_*anH 5

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

viewer.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local
Run Code Online (Sandbox Code Playgroud)

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

dim tbl as new DataTable()
Run Code Online (Sandbox Code Playgroud)

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

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

如果要使用服务器模式

viewer.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Remote
Run Code Online (Sandbox Code Playgroud)

你必须使用 viewer.ServerReport

viewer.ServerReport.ReportServerUrl = New Uri(ReportServerURL)
Run Code Online (Sandbox Code Playgroud)

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

数据集处理:

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

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