我正在尝试将报表从rdl转换为rdlc以通过LocalReport呈现为Word文件。除了2008年的报告,每个2010年架构版本报告都能正常运行。
使用2008年报告,LocalReport只会呈现无数据文件而不会出现任何错误或警告。调试项目时,我看到所有DataSet都添加了正确的名称作为报表文件中的DataSet定义。并且所有DataSet都需要数据。
我已经尝试过不向LocalReport.DataSources添加任何DataSet,但报告只是渲染成功而没有数据,而与其他工作报告一样,它会抛出异常“无法为数据集创建数据读取器'[数据集名称]' ”
这是我的代码:
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 parammeter in report.ReportParameters)
{
Microsoft.Reporting.WinForms.ReportParameter param = new Microsoft.Reporting.WinForms.ReportParameter()
{
Name = parammeter.Name
};
param.Values.AddRange(parammeter.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();
}
有没有人见过这个?
我完全不明白为什么?请帮助我,我已经坚持了一个星期。