无法在第三个 XtraReport 中合并两个 XtraReport 页面

Posted

技术标签:

【中文标题】无法在第三个 XtraReport 中合并两个 XtraReport 页面【英文标题】:Can't merge two XtraReport Pages in Third XtraReport 【发布时间】:2016-05-28 17:09:24 【问题描述】:

对于我必须准备报告的每条记录,我都有奇偶数页。当我运行 MVC 应用程序时,我可以看到 XtraReport 查看器,但其中没有页面。

控制器/动作逻辑

var xtraReport1 = XtraReport.FromStream(GenerateStreamFromString(layout1), true);
var xtraReport2 = XtraReport.FromStream(GenerateStreamFromString(layout2), true);

var finalExtraReport = new XtraReport();

foreach(var row in dataTable.Rows)

    xtraReport1 = XtraReport.FromStream(GenerateStreamFromString(layout1), true);
    xtraReport1.DataSource = dataTable.Select("id = '"+ row[id] +"'")CopyToDataTable();
    xtraReport1.CreateDocument();
    finalExtraReport.Pages.AddRange(xtraReport1.Pages);

    xtraReport2 = XtraReport.FromStream(GenerateStreamFromString(layout2), true);   
    xtraReport2.DataSource = dataTable.Select("id = '"+ row[id] +"'")CopyToDataTable();
    xtraReport2.CreateDocument();
    finalExtraReport.Pages.AddRange(xtraReport2.Pages);


return View(finalExtraReport);

查看

@model XtraReport
@
    ViewBag.Title = "Home Page";


@html.DevExpress().WebDocumentViewer(settings =>

    settings.Name = "webDocumentViewer";
).Bind(Model).GetHtml()

【问题讨论】:

【参考方案1】:

找到了解决办法。

此行为是由 WebDocumentViewer 扩展重新创建报表文档以预览它的事实引起的。因此,动态添加到报表中的报表页面将被清除。

目前,当使用 HTML5 Document Viewer 控件预览报表时,需要调用 XtraReport.AfterPrint 事件处理程序来合并报表页面。因此,处理“r2”报表的 AfterPrint 事件并使用此事件处理程序将“r1”报表的页面添加到“r2”报表。

public ActionResult ShowReport()

     //...
     XtraReport mainReport = //get a report;
     mainReport.AfterPrint += Report_AfterPrint;
     //...

void Report_AfterPrint(object sender, EventArgs e) 
     //merge reports
    XtraReport sourceReport = sender as XtraReport;

    XtraReport additionalReport = new XtraReport1();
    additionalReport.CreateDocument();

    sourceReport.Pages.AddRange(additionalReport.Pages);

注意:从 15.2.5 版开始,WebDocumentViewer 支持开箱即用地显示合并报表。

【讨论】:

以上是关于无法在第三个 XtraReport 中合并两个 XtraReport 页面的主要内容,如果未能解决你的问题,请参考以下文章

将两个不相关的视图合并到一个视图中

如何合并 2 个 std::maps,并在第三个映射中输出结果

Devexpress Xtrareport 并排报表

如何合并两个或多个具有不同 where 条件的查询?我必须重用在第一个代码中使用的代码

使用没有第三个数组的递归合并两个排序数组

将两个查询结果存储在第三个变量中