我正在尝试将我的报告从 rdl 转换为 rdlc 以通过 LocalReport 呈现为 Word 文件。除 2008 年报告外,每个 2010 年架构版本报告都运行良好。
对于 2008 年的报告,LocalReport 只是呈现一个没有任何错误或警告的无数据文件。调试项目时,我看到所有数据集都以正确的名称添加为报告文件中的数据集定义。并且所有 DataSet 都有所需的数据。
我尝试不向 LocalReport.DataSources 添加任何 DataSet,但报表只是成功渲染而没有数据,而对于其他工作报表,它会抛出异常“无法为数据集'[a dataset name]' 创建数据读取器”。
这是我的代码:
LocalReport localReport = new LocalReport();
localReport.ReportPath = localReportPath;
localReport.SubreportProcessing += LocalReport_SubreportProcessing;
localReport.DataSources.Clear();
//Add datasource
foreach (var ds in report.ReportDataSets.Where(x => localReport.GetDataSourceNames().Contains(x.DataSetName)))
{
localReport.DataSources.Add(new ReportDataSource(ds.DataSetName, ds.Data));
}
localReport.Refresh();
//Add parameters
List<Microsoft.Reporting.WinForms.ReportParameter> paramaterList = new List<Microsoft.Reporting.WinForms.ReportParameter>();
foreach (var parameter in report.ReportParameters)
{
Microsoft.Reporting.WinForms.ReportParameter param = new Microsoft.Reporting.WinForms.ReportParameter()
{
Name = parameter.Name
};
param.Values.AddRange(parameter.Value.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
paramaterList.Add(param);
}
localReport.SetParameters(paramaterList.ToArray());
const string devInfo = @"<DeviceInfo><SimplePageHeaders>True</SimplePageHeaders></DeviceInfo>";
Microsoft.Reporting.WinForms.Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string extension;
var bytes = localReport.Render(format, devInfo, out mimeType, out encoding, out extension, out streamids, out warnings);
var outputPath = Path.GetTempPath();
if (!Directory.Exists(outputPath))
{
Directory.CreateDirectory(outputPath);
}
using (var fileStream = File.Create(outputPath + @"\" + report.ReportName + "." + extension, bytes.Length))
{
fileStream.Write(bytes, 0, bytes.Length);
fileStream.Close();
}
有没有人遇到过这个?
我完全不明白为什么?请帮助我,我已经坚持了一个星期。