我有 C# (WPF) 应用程序,我想在 ReportViewer 控件中显示 SSRS 报告。本地报告文件中嵌入了 XML 数据源。从 SQL Server Business Intelligence Development Studio 运行时,报表会正确显示。但是当我使用我的应用程序运行时,出现以下错误:
A data source instance has not been supplied for the data source '...'.
所以这就是我正在做的事情:
我已经定义了嵌入式 XML 数据,如本教程从嵌入式 XML 数据定义报表数据集中所述。我有一个名为 的数据源XmlDataSource_TopCustomers
和一个名为 的数据集XmlDataSet_TopCustomers
,使用该数据源。我已经在表格和图表中引用了数据集。总的来说,RDL 看起来像这样(当然,这只是必不可少的):
<报告 xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"> <身体> <报告项目> <Tablix 名称="Tablix1"> <DataSetName>XmlDataSet_TopCustomers</DataSetName> </Tablix> <图表名称="图表1"> <DataSetName>XmlDataSet_TopCustomers</DataSetName> </图> </报告项目> </正文> <数据源> <DataSource Name="XmlDataSource_TopCustomers"> <连接属性> <DataProvider>XML</DataProvider> <连接字符串 /> </连接属性> <rd:SecurityType>无</rd:SecurityType> <rd:DataSourceID>47833b52-231f-4634-8af4-3c63272b02a7</rd:DataSourceID> </数据源> </数据源> <数据集> <数据集名称="XmlDataSet_TopCustomers"> <查询> <DataSourceName>XmlDataSource_TopCustomers</DataSourceName> <命令文本><查询> <ElementPath>Root /CustomerOrder {@CustomerNo, @CustomerName, @OrdersCount (Integer), @Total(Float), @AveragePerOrder(Float)}</ElementPath> <XmlData> <根> <CustomerOrder CustomerNo="10001" CustomerName="Name 1" OrdersCount="2" Total="5.446740000000000e+003" AveragePerOrder="2.723370000000000e+003" /> <CustomerOrder CustomerNo="10894" CustomerName="Name 2" OrdersCount="5" Total="3.334750000000000e+003" AveragePerOrder="6.669500000000001e+002" /> <CustomerOrder CustomerNo="12980" CustomerName="Name 3" OrdersCount="2" Total="2.003290000000000e+003" AveragePerOrder="1.001645000000000e+003" /> </根> </XmlData> </Query></CommandText> <rd:UseGenericDesigner>真</rd:UseGenericDesigner> </查询> <字段>... </数据集> <rd:ReportUnitType>英寸</rd:ReportUnitType> <rd:ReportID>02172db8-2a1d-4c35-9555-b37ee6193544</rd:ReportID> </报告>
此时,IDE 中一切正常。
在我的 C# 应用程序中,我有一个 ReportViewer 和以下代码:
Viewer.LocalReport.ReportPath = @"<actualpath>\TopCustomers.rdl"; // actual path is OK
Viewer.RefreshReport();
然后我明白了
A data source instance has not been supplied for the data source 'XmlDataSet_TopCustomers'.
我见过其他人有同样的问题,但在大多数情况下,问题是多个数据源,这里不是这种情况,正如您从上面的 RDL 片段中看到的那样。
有什么建议么?