Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能,Stimulsoft Ultimate包含了所有内容!
有时,人们会联系我们的技术支持,询问一个常见问题:如何正确地将多份报告合并为一份,尤其是在导出之前。虽然这在技术上很简单,但仍有一些选项需要考虑。例如,在合并报告时如何管理不同的度量单位或页码。没有通用的解决方案,因为它取决于报告创建者的具体目标和目的。为了说明如何将多份报告合并为一份,我们为JS和.NET开发了几个示例。
Stimulsoft Reports官方正版下载(qun:740060302)https://www.evget.com/product/2398/download
MergeDocument() 方法
即使是小代码,也很容易出错。为了简化流程,我们MergeDocument()在 StiReport 类中添加了一个用于合并报表的方法。在 JavaScript 报表工具中,此方法称为mergeDocumentAsync()。
该方法以报表作为输入,其页面将添加到当前报表中。它还有一个重载,接受布尔值作为第二个参数,以确定是否需要预先构建报表。这允许在一行中合并两个 StiReport 对象:report.MergeDocument(report2, true)。
- 使用此合并方法时,会自动处理以下因素:
- 嵌入报告的计量单位被转换为与主报告的计量单位相匹配;
- 缓存得到正确管理;
- 书签已复制。
使用仪表板的功能
使用仪表板的模板文件可以同时包含报表页面和仪表板。但是,仪表板不是静态对象,没有固定的尺寸。虽然仪表板有一个Render()方法,但它只是一个占位符,不能像报表那样构建。仪表板的具体尺寸只能在导出期间设置,因此无法将报表和仪表板组合成单个现成的文档。该MergeDocument方法仅将另一个模板中的报表页面添加到主报表中。如果模板仅包含仪表板,则该方法将引发异常。在准备合并模板时应考虑到这一点。
功能
方法的实际应用
首先,确定哪个报告将嵌入到另一个报告非常重要,因为这会影响报告单元和页面顺序。请考虑以下代码示例:
report1.MergeDocument(report2);
report2 中的页面将添加到 report1 的页面之后,并转换为 report1 的单元。
因此,尽管在两种情况下使用相同的报告,命令report1.MergeDocument(report2)和report2.MergeDocument(report1)将产生两个不同的文档作为输出。
另一个重要方面涉及报告的构建。
通常,需要合并已构建的报告。例如,报告可能在应用程序的不同部分作为单独的部分创建,然后需要将它们合并为一份最终报告。
另一种常见方法是在一个地方创建报告,但将它们作为完成的文档保存在磁盘或数据库中。换句话说,首先积累报告,然后将其合并为一份。在这种情况下,代码可能如下所示:
var report = StiReport.CreateNewReport(); report.LoadDocument("documents\\Invoice.mdc"); var report2 = StiReport.CreateNewReport(); report2.LoadDocument("documents\\Christmas.mdc"); report.MergeDocument(report2); report.Show();
但在某些情况下,您只需在一个地方下载、构建和合并两个报告模板。合并报告的示例代码:
var report = StiReport.CreateNewReport(); report.Load("Reports\\Invoice.mrt"); var report2 = StiReport.CreateNewReport(); report2.Load("Reports\\Christmas.mrt"); report.Render(); report2.Render(); report.MergeDocument(report2); report.Show();
为了简化代码,您可以使用MergeDocument()具有两个参数的方法重载,并将 true 作为第二个参数传递。这样,两个报告的呈现将在方法中自动处理。例如,使用 build 重载合并报告的代码如下所示:
var report = StiReport.CreateNewReport(); report.Load("Reports\\Invoice.mrt"); var report2 = StiReport.CreateNewReport(); report2.Load("Reports\\Christmas.mrt"); report.MergeDocument(report2, true); report.Show();
如果要合并两份以上的报告,请务必保持一致性,并记住使用主报告的单位。以下是合并三份报告的示例:
var report = StiReport.CreateNewReport(); report.Load("Reports\\Invoice.mrt"); var report2 = StiReport.CreateNewReport(); report2.Load("Reports\\Christmas.mrt"); var report3 = StiReport.CreateNewReport(); report3.Load("Reports\\Report3.mrt"); report.MergeDocument(report2, true); report.MergeDocument(report3, true); //report is containing a rendered pages of the report, report2 and report3 report.Show();
JavaScript 报告工具使用一种称为 的异步合并方法mergeDocumentAsync()。总体而言,上述所有内容都适用于此方法。报告页面的合并及其呈现都是异步进行的。因此,如果该mergeDocumentAsync()方法使用一个参数,并且需要在合并之前构建报告,renderAsync2()则应在 JavaScript 中对它们调用该方法。例如,合并多个报告:
var report = StiReport.CreateNewReport(); report.Load("Reports\\Invoice.mrt"); var report2 = StiReport.CreateNewReport(); report2.Load("Reports\\Christmas.mrt"); await report.renderAsync2(); await report2.renderAsync2(); await report.mergeDocumentAsync(report2); viewer.report = report;
使用该mergeDocumentAsync(,)方法将多个模板合并为一份报告。
var report = StiReport.CreateNewReport(); report.Load("Reports\\Invoice.mrt"); var report2 = StiReport.CreateNewReport(); report2.Load("Reports\\Christmas.mrt"); await report.mergeDocumentAsync(report2, true); viewer.report = report;
这使得在查看、打印或导出之前合并报告变得更加容易。