0

我有 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">
            <Da​​taSetName>XmlDataSet_TopCustomers</DataSetName>
          </Tablix>
          <图表名称="图表1">
            <Da​​taSetName>XmlDataSet_TopCustomers</DataSetName>
          </图>
        </报告项目>
      </正文>
      <数据源>
        <Da​​taSource Name="XmlDataSource_TopCustomers">
          <连接属性>
            <Da​​taProvider>XML</DataProvider>
            <连接字符串 />
          </连接属性>
          <rd:SecurityType>无</rd:SecurityType>
          <rd:DataSourceID>47833b52-231f-4634-8af4-3c63272b02a7</rd:DataSourceID>
        </数据源>
      </数据源>
      <数据集>
        <数据集名称="XmlDataSet_TopCustomers">
          <查询>
            <Da​​taSourceName>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 片段中看到的那样。

有什么建议么?

4

3 回答 3

1

我的问题的答案也可以在这里找到何时在 RDL 报告上使用 RDLC?在这里http://www.gotreportviewer.com/。基本上是这样的:

与报表服务器不同,ReportViewer 控件不连接到数据库或执行查询。此外,在本地模式下,唯一可用的导出格式是 Excel、Word 和 PDF。(在远程模式下,报表服务器支持的所有格式都可用。)不能通过添加自定义呈现器或自定义报表项来扩展 ReportViewer 控件。

更多信息可以在这里找到http://msdn.microsoft.com/en-us/library/ms252109(v=vs.80).aspx

处理 .rdlc 文件的 ReportViewer 控件忽略 RDL 的元素。如果报表定义包含查询,控件将不会处理它。

将 .rdl 文件转换为 .rdlc 格式时,您必须手动将报表定义中的数据源和查询信息替换为应用程序中提供的数据结构

因此,您必须显式获取数据并提供与 RDL 文件中ReportViewerReportDataSource数据集具有完全相同名称的数据。

于 2013-01-24T07:54:48.543 回答
0

我有一个小型命令行应用程序,它执行类似的操作,但在定义报告路径和使用报告查看器执行任何操作之间,我正在为要运行的报告设置数据源:

report.DataSources.Add(new ReportDataSource("DataSet_for_Distribution", table));

...表是一个数据表。

之后,我以编程方式调用报告渲染方法没有问题。

你能在渲染之前设置一个中断,看看报表实际有哪些数据源吗?

要尝试的另一件事,可能只是您将其格式化(或堆栈格式化)以将其发布到此处,但是当我在报告中嵌入 XML 数据集时,它都使用如下格式:

<CommandText>&lt;Query&gt;
    &lt;ElementPath&gt;Root /S  {@OrderDate (Date), @TotalDue (Decimal)} /C {@LastName} &lt;/ElementPath&gt;
    &lt;XmlData&gt;
    &lt;Root&gt;
    &lt;S OrderDate="2003-07-01T00:00:00" SalesOrderNumber="SO51131" TotalDue="247913.9138"&gt;
      &lt;C FirstName="Shu" LastName="Ito" /&gt;
    &lt;/S&gt;
    &lt;S OrderDate="2003-10-01T00:00:00" SalesOrderNumber="SO55282" TotalDue="227737.7215"&gt;
      &lt;C FirstName="Shu" LastName="Ito" /&gt;
    &lt;/S&gt;
    &lt;S OrderDate="2002-07-01T00:00:00" SalesOrderNumber="SO46616" TotalDue="207058.3754"&gt;
      &lt;C FirstName="Jae" LastName="Pak" /&gt;
    &lt;/S&gt;
    &lt;S OrderDate="2002-08-01T00:00:00" SalesOrderNumber="SO46981" TotalDue="201490.4144"&gt;
      &lt;C FirstName="Ranjit" LastName="Varkey Chudukatil" /&gt;
    &lt;/S&gt;
    &lt;S OrderDate="2002-09-01T00:00:00" SalesOrderNumber="SO47395" TotalDue="198628.3054"&gt;
      &lt;C FirstName="Michael" LastName="Blythe" /&gt;
    &lt;/S&gt;
    &lt;/Root&gt;
    &lt;/XmlData&gt;
    &lt;/Query&gt;</CommandText>
于 2013-01-23T14:53:23.397 回答
0

如果数据源具有指定的凭据,我不确定您所说的内容。

这部分在这里:

<ConnectionProperties>
            <DataProvider>XML</DataProvider>
            <ConnectString />
          </ConnectionProperties>

一般来说,对于 SQL 数据源,当无法查看其他人或来自应用程序的报告时,这是由于托管服务器假定的凭据与构建应用程序的 IDE 不同。它不知道我的名字是否是 Brett,我的凭据在远程调用它时正在运行它。当您在托管报告的服务器上指定凭据时,通常可以解决此问题。您进入托管报告的服务器,我假设您正在这样做,因为您有一个“rdl”报告与一个 rdlc 报告。找到数据源,单击属性,将设置更改为“使用这些凭据”。提供您知道有效的凭据。

这可能会解决问题。我不确定 Sharepoint 连接和 XML 连接,但这在查看 SQL Server 连接问题时很常见。

于 2013-01-23T16:16:40.587 回答