asp.net - Crystal Report Viewer Next Page 关闭子报表选项卡并返回主报表第二页
问题描述
我有一个主报告和两个子报告作为按需显示,我的问题是当单击子报告链接时一切都很好,第一页作为子报告将显示,但是如果我想转到下一页或导出子报告作为 pdf,仅主要报告将被导出。如果我想去下一页水晶报表查看器关闭我的子报表选项卡并返回到第二个主报表页面我的 CrystalReportViewerPage.cs 类
public partial class CrystalReportViewerPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
CrystalReportViewer1.ReportSource = (ReportDocument)Session["Report"];
}
else
{
if (string.IsNullOrEmpty(Page.RouteData.Values["userId"].ToString()))
throw new ArgumentNullException();
var userId = Guid.Parse(Page.RouteData.Values["userId"].ToString());
CrystalReportViewer1.ReportSource = CrystalController.Statements[userId];
Session["Report"] = CrystalController.Statements[userId];
}
}
}
和aspx页面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CrystalReportViewerPage.aspx.cs" Inherits="Mahya.ITS.CityMan.Views.Shared.CrystalReportViewerPage" %>
<%@ Register TagPrefix="CR" Namespace="CrystalDecisions.Web" Assembly="CrystalDecisions.Web, Version=13.0.4000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<script src='<%=ResolveUrl("~/Content/crystalreportviewers/js/crviewer/crv.js")%>' type="text/javascript"></script>
<body style="margin: auto;">
<form id="form1" runat="server">
<div style="text-align: center; margin: auto; direction: rtl; display: table" >
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" BestFitPage="True"
ToolPanelView="None" EnableTheming="True" HasToggleGroupTreeButton="False" HasCrystalLogo="False" />
</div>
</form>
</body>
</html>
CrystalDecisions.Web dll 版本=13.0.4000.0
解决方案
所以经过几个小时,终于发现问题了。必须在 OnInit 而不是 page_load 事件中作为报表查看器的初始源。所以一切都很好,报告源不会再被重新填充。
protected void CrystalReportViewer1_OnInit(object sender, EventArgs e){
if (string.IsNullOrEmpty(Page.RouteData.Values["userId"].ToString()))
throw new ArgumentNullException();
var userId = Guid.Parse(Page.RouteData.Values["userId"].ToString());
CrystalReportViewer1.ReportSource = CrystalController.Statements[userId];
}