3

レポートを作成する必要があるレコードごとに、奇数の偶数ページがあります。MVC アプリケーションを実行すると、XtraReport Viewer が表示されますが、ページがありません。

コントローラ/アクション ロジック

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()
4

1 に答える 1

2

解決策を見つけました。

この動作は、WebDocumentViewer 拡張機能がレポート ドキュメントを再作成してプレビューするために発生します。そのため、レポートに動的に追加されたレポート ページはクリアされます。

現在、HTML5 ドキュメント ビューアー コントロールを使用してレポートをプレビューする場合、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 はマージされたレポートの表示をすぐにサポートします。

于 2016-02-19T10:42:05.193 に答える