我在 ReportBuilder 3.0 中构建了一个非常简单的报告 (.rdl)。它连接到我的数据库,并从地址字段中获取城市。
SELECT TOP 10 City, COUNT(City) FROM [MYDB].[dbo].[ResidentialAddress] WHERE StateName = 'WA' OR StateName = 'Washington' GROUP BY City ORDER BY COUNT(City) DESC
这适用于 ReportBuilder。我保存并关闭。然后我尝试通过 MicroSoft.Reporting.WebForms.ReportViewer 在 VS 2010 中打开并查看报表。我可以在本地的 c#/ASP.NET 网站中加载一个完全空白的 RDL 文件(仅限文本)。
this.MyReportViewer.Reset();
this.MyReportViewer.ProcessingMode = ProcessingMode.Local;
this.MyReportViewer.AsyncRendering = false;
this.MyReportViewer.LocalReport.LoadReportDefinition(new StreamReader("H:\\DataReportsViewer\\DataReportsViewer\\" + RDLFileList.SelectedValue));
this.MyReportViewer.LocalReport.ReportPath = RDLFileList.SelectedValue;
this.MyReportViewer.ShowReportBody = true;
this.MyReportViewer.LocalReport.Refresh();
但是,一旦我添加图表,我就会收到此错误:
尚未为数据源“DataSet1”提供数据源实例。
这对我来说没有意义,因为当我打开 RDL 文件时,连接字符串和查询就在那里,看起来应该是这样。
<DataSources>
<DataSource Name="DataSource1">
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString>Data Source=MYSERVER;Initial Catalog=Ad_Dev</ConnectString>
<IntegratedSecurity>true</IntegratedSecurity>
</ConnectionProperties>
<rd:SecurityType>Integrated</rd:SecurityType>
<rd:DataSourceID>350f6976-9402-43fd-b8f8-8f809f116f84</rd:DataSourceID>
</DataSource>
</DataSources>
<DataSets>
<DataSet Name="DataSet1">
<Query>
<DataSourceName>DataSource1</DataSourceName>
<CommandText>SELECT TOP 10 ResidentialAddress.City,COUNT(ResidentialAddress.City)
FROM ResidentialAddress
WHERE StateName = 'WA'
GROUP BY ResidentialAddress.City
ORDER BY COUNT(ResidentialAddress.City)</CommandText>
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
<Fields>
<Field Name="City">
<DataField>City</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ID">
<DataField />
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
</Fields>
</DataSet>
</DataSets>
所以,我在我的 c# 代码中尝试了解决方法:
//Added line: TestDataSource runs same query and returns correctly loaded DataTable
ReportDataSource reportDataSource = new ReportDataSource("DataSet1", TestDataSource());
this.MyReportViewer.LocalReport.DataSources.Add(reportDataSource);
并且运行,但没有数据显示。我赢不了!:(
有任何想法吗?SSRS 和 ASP.NET 不就是为了互相玩吗?我希望制作这个报告查看器的本地测试版本,但我已经做了很多修改才能让空白报告在本地运行。