我有 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 片段中看到的那样。
有什么建议么?