在 SSRS 中创建报告时出现上述错误。我正在尝试从 2 个数据库中获取 2 个数据集,我通过创建一个包含来自 Dataset1 的数据的主报告和一个包含另一个数据集的子报告来做到这一点。
当我创建同一数据集的子报表时,错误消失了。关于我可能做错了什么的任何想法?
请看下面的截图:
当我执行以下操作时会发生错误:
在 SSRS 中创建报告时出现上述错误。我正在尝试从 2 个数据库中获取 2 个数据集,我通过创建一个包含来自 Dataset1 的数据的主报告和一个包含另一个数据集的子报告来做到这一点。
当我创建同一数据集的子报表时,错误消失了。关于我可能做错了什么的任何想法?
请看下面的截图:
当我执行以下操作时会发生错误:
一般来说,从我所看到的情况来看,SSRS 在告诉你什么是错误的时候有人类已知的最严重的错误。一般来说,我见过这个,罪魁祸首是三件事之一:
当您插入“子报表”时,您可以右键单击并选择“属性”。它有一个您需要选择的“参数”侧面板,您需要“添加”(按正确的顺序和类型为每个面板)一个“名称”(报告的参数名称)和匹配的“值”目前的报告传递给它。
EG:因此,如果我有一个希望客户显示其人口统计信息的子报表,而我有一个主报表,其中包含多行业务数据,每行都有一个客户 ID。如果我的子报表采用“CustomerID”参数,我会将其作为名称并从当前数据集中选择“[Customer_ID]”以传递给它。
您必须记住,您必须“添加”子报告所需的每个单独参数。
从您的项目解决方案文件夹中删除所有*.rdl.data 。
如果您更改了子报表的名称并在预览中遇到此错误,只需在预览模式下单击“刷新”图标。
缓存数据以便更快地预览。子报表的处理方式相同。
希望这可以帮助。
2019 来了 | 如果接受的答案不起作用,如果互联网上的所有答案都不起作用:
我已经弄清楚了什么是“真正的”问题,并在浪费了数小时后为它找到了解决方案,所以我向你保证你现在正在节省时间。
简而言之:一旦您开始对子报告使用参数,问题就会出现,原因是 Visual Studio 开始使用比用于构建主报告的更新的 rdlc xml 文件结构。
解决方案无法在这里用文字来解释,所以我制作了一个修复视频,长度为 1:30。
https://www.youtube.com/watch?v=Cwd5yHUq1W0
回答完毕。
1- 在指定位置找不到子报表。
原因:子报表的文件结构与主报表的文件结构不同,主报表可能在 rdlc xml 标准版本 2008 上运行,而子报表在 2016 版本上运行。一旦使用“参数”就会发生这种情况
2-子报表的数据检索失败
原因:你没有给子报表它需要的数据/数据集/数据源,你需要给主报表注入一个事件监听器,以便在主报表遇到子报表时调用。欲了解更多信息,请在此处观看我的完整视频:
3-子报表无法显示
当执行子报表代码或子报表事件侦听器期间发生任何异常时,就会发生这种情况,以查找问题,运行 vs 调试模式并观察输出窗口
我刚刚遇到这个错误,当我从主报告中剪切子报告然后将其粘贴回去时,我发现它消失了 - 去图
就我而言,我的子报表中有一个 VB 脚本错误。我试图访问一个变量,该变量只能从报告标题(当前页码和总页码)访问。
修复此错误后,错误消失了。
也许这些信息可以帮助某人。
这是 2019 年 12 月 Adel Mourad 回答的后续行动,但有一些警告。我也遇到了这个,忘记了设计师的变化。我进入了 VS2017,无论出于何种原因,设计师都走了。不知道如何/在哪里/为什么/Windows 更新或什么。无论如何,在重新安装设计器后,我也遇到了更新运行报告的问题。
很少有注释可以澄清视频中呈现的内容。开放报告命名空间更改为2016
,我将其更改回2008
.
其次,来自他的视频,但很小。在哪里拆除
<ReportSections>
<ReportSection>
<Body...>
</ReportSection>
</ReportSections>
您只想删除外部的两个ReportSections
和ReportSection
部分。Leave the body
因为那是报告的实际内容。
最后,在报告参数的最后一部分。你可以 KEEP ReportParameters
,但下面的整个 REMOVE ReportParametersLayout
。
至于为什么,我现在只能推测是主报告正在运行 2008 版本的命名空间,所以当它到达一个尝试运行 2016 命名空间的子报告时,就会导致它窒息。我敢打赌并建议,如果主报告和子报告都是用 2016 年设计的,那就没问题了。
再次,归功于 Adel Mourad 对我的回答。
我也一直在处理这个问题。我的问题是因为我重命名了子报表中的数据集,但没有更改表达式中的数据集字段。
例如:原始数据集名称:dsOriginal 新数据集名称:dsNew
原文表达: =First(Fields!Field1.Value, "dsOriginal")
新表达式应该是:=First(Fields!Field1.Value, "dsNew")
我相信它说找不到子报表的原因是因为子报表定义无效,因此它不会编译它。它不会让您知道问题可能是什么。
希望这对其他前来寻找的人有所帮助。
刚刚遇到这个问题 - 奇怪的是它是由于子报表尺寸 - 它太宽而无法放入主报表中的占位符,所以它抛出了这个完全没有帮助的错误。
@djangojazz:非常感谢这个技巧。我的答案是#2 和#3。如果有人遇到同样的问题,我会更详细地说明:
相同的错误得到不同的消息:
解决方案:
希望这可以帮助某人。