几个小时以来,我一直把头撞在墙上(仍然不是字面意思,但如果我找不到解决方案,我会尽快开始)。对我来说,我实际面临的问题实际上不是问题,也不是问题,因为我在同一个Silverlight项目的另一个菜单中成功使用子报表,我正在处理。我甚至无法定义它是什么 - 一个问题,一个问题,一个邪恶...... Crystal Reports有时可能......好吧,有趣。包括这样一个事实,我已经与CR一起工作了2周(仍然在工作时学习),情况非常好。反正。
首先,我试图基本上每个文档有两份报告副本。在报告的命令(通过数据库专家)中,我只有select * from Documents where {?filter}
。在调用ExportToDisk()方法之前,我从C#中给出where子句。有一个<sdk:DataGrid></sdk:DataGrid>
,我从中获取所有标记的行(docs),准确地说它们的RowID,创建一个'in()'子句,将它提供给报告的?filter param并且它正在工作我期待。
我在网上搜索,我能找到的最好的是有一个'虚拟'主报告,其部分分为两部分,并将我的报告作为子报告插入这些部分。到现在为止还挺好。我做了'链接参数'(更改子报表链接...选项),就像我在其他菜单中所做的那样......没有数据。只显示标签。我检查了3个要报告的文档,我总共有3 * 2 = 6页,但都是空字段。
经过一个多小时的测试后的最终结论:如果我有一份报告并通过数据库专家将其设置为select * from Documents where RowID = '<someGuid>'
或select * from Documents where {?filter}
,那么我总是得到所有文档的字段(如客户,代码等) - 在第一种情况下,只有一个页面用于特定文档,在第二种情况下 - 每个文档一页。
如果我尝试作为子报表并从网格中选择2个文档,我会得到四个“空”页面 - 每个文档两个。不用说,如果子报表的命令是:select * from Document where {?filter}
并且我将过滤器与主报表链接,则它无效。
令我惊讶的是,它似乎正在工作!...在一个特定的用例中:如果我将子报表的命令设置为select * from Documents where 1 = 1
。在这种情况下,我会在表格中找到1000个文档的2000页 - 所有字段都填充了数据。
所以这是我的'问题'!?这太奇怪了,我甚至不知道它应该被称为“问题”还是别的什么。任何帮助将不胜感激。
编辑:总结一下:我有一个主要的'虚拟'报告,其命令设置为select * from Documents where {?filter}
。我将其“细节”部分分为两部分,并在每个部分中插入一个子报表。子报告的命令是select * from Documents where doc_RowID = '{?filter}'
,其中RowID应该通过链接来自主报告。我在子报告中尝试了select * from Documents where doc_RowID = '<someGuid>'
,然后我再次获得了带有标签的页面。如果我在子报告中有1 = 1,那么它“有效”。
在主报告中,我甚至尝试按doc_RowID列对文档进行分组,并将子报表放在GroupHeader和GroupFooter部分中。没有成功。
从今天开始编辑(2016年12月21日):我尝试设置子报表的命令,按左连接表docItems的某个字段过滤数据为di,显示已购买的项目:where di.Price > 5
。当我在SQL Server Management Studio中使用此where子句运行查询时,我在3个文档中得到7条记录的结果。在报告中,我得到260页,这意味着它在CR中返回130个文档。 WTF正在这里......:O
edit3:客户的SQL服务器已关闭,因此我决定继续在我们的服务器上进行测试。问题消失了。这可能听起来像个好消息,但最终,我必须将我的工作部署到他们的服务器......
答案 0 :(得分:0)
我为此找到了魔法。我把它称为'魔术',因为我不知道它在这种情况下究竟有多大帮助,下次我遇到类似的问题也不会有所帮助。我希望它不会发生。
阅读this thread - 在那里我找到了解决方案。万一它会死了,我会在这里发布:
在CR XI设计器中打开报告。
选择数据库 - &gt;设置数据源位置。
将显示“设置数据源位置”窗口,并在“替换为”部分中连接到数据库,并通过单击“更新”按钮将这些表替换为当前数据源中的表。
更新后关闭“设置数据源位置”窗口。
转到“数据库菜单”并点击“验证数据库”,然后点击“确定”。
预览报告并保存报告。