0

我几年前编写的一个 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 格式,我允许这样做,尽管这可能与故障无关。

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

更新

在代码中放入一些 MessagesBoxes 我找到了子报告不处理的原因,但我现在需要找出原因。

'LocalReport_SubreportProcessing' 事件为我的报告触发两次 - 每个子报告触发一次。

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

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

4

1 回答 1

2

我刚刚偶然发现了同样的问题。你不讨厌微软有时对我们这样做吗?

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

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

于 2012-09-14T00:15:22.767 回答