Microsoft VS2012报告,其子报告在Dev中工作但不在线

时间:2012-09-12 16:22:03

标签: winforms reportviewer subreports

我几年前写的一个Windows应用程序最近需要进行一些更改(最初用VS2005编写,使用VS2008进行修改,现在更新/修改为VS2012项目)。

该应用程序包含一个包含两个子报告的Microsoft报告。子报告数据是在ReportViewer1.LocalReport.SubreportProcessing事件期间填充的数据集。

主报告中添加了一个新字段,但未修改子报告。该报告在开发PC上按预期工作,但是当安装在客户端笔记本电脑上时,子报告失败并显示以下消息: - Data retrieval failed for the sub-report, <report name>, located at <report...rdlc>. Please check the log files for more information

客户端笔记本电脑上没有生成日志文件

我尝试手动安装CTP 2012 Microsoft Report查看器,但安装失败,报告已存在较新版本(可能来自同时安装的SQL Server Express 2012)。

用于测试的数据库是从实时备份恢复的,因此数据是相同的。将ReportDataSource添加到子报告的子报告事件包含一个不会引发任何异常的try-catch块

在开发期间,当我在VS2012中打开报告时,会打开一个对话框,询问是否应将其更新为2012格式,我允许这样做,但这可能与故障无关。

有没有人遇到过这个问题?有没有办法强制客户端笔记本电脑上的日志文件的物理输出?

更新

在代码中放置一些MessagesBox我发现了子报告没有处理的原因,但我现在需要找出原因。

“LocalReport_SubreportProcessing”事件会为我的报告触发两次 - 每个子报告都会触发一次。

为了确定哪个子报告需要额外的数据源,我检查'SubreportProcessingEventArgs.ReportPath'的值。在我的开发系统中,它具有报告的名称(减去.rdlc扩展名),但在客户端笔记本电脑上,该值为空。

我无法看到报告如何构建到输出中。主要报告在笔记本电脑上显示OK(只是缺少子报告),虽然目前我不知道从哪里显示 - 需要更多调查!

1 个答案:

答案 0 :(得分:2)

我偶然发现了同样的问题。难道你有时候不喜欢微软对我们这么做吗?

无论如何,我认为最好的解决方案是检查SubreportProcessingEventArgs.DataSourceNames[0]而不是检查SubreportProcessingEventArgs.ReportPath。这将(我检查)具有子报表的数据源的名称。

如果您唯一地命名数据源,则可以识别哪个子报表正在调用事件并正确设置数据源。我通常将我的数据源命名为{SubreportName}DataSet,因此我的所有数据源名称都包含子报告名称。祝你好运。