【问题标题】:ASP.NET MVC VS2010 Crystal Reports Beta 2 Can't Print, Export, Zoom, or Change PagesASP.NET MVC VS2010 Crystal Reports Beta 2 无法打印、导出、缩放或更改页面
【发布时间】:2010-10-10 21:05:01
【问题描述】:

我刚刚升级到 Crystal Reports for Visual Studio 2010 的 beta 2,在 ASP.NET MVC 应用程序中使用 Web 控件时,我无法打印、导出、缩放或更改页面。

我可以让报告在网页上正常运行和显示。所有按钮都有图像,并且报告数据看起来与页面上应有的完全一样。

在 VS2010 中查看 .rpt 时,我可以单击“报告预览”并让报告运行并打印、导出、缩放等...这似乎使用 Windows 控件来呈现报告而不是 Web控制。因此我相信我的报告文件本身是有效的。

在网页上查看 Crystal Reports Viewer 中的报告时,当我尝试每个按钮时,我会获得不同的功能:

  • 打印:单击打印按钮一次,报表返回到 Web 服务器,重新运行报表,然后返回到网页,什么也不做。再次按下它,它会打开一个新标签,在这个新标签中包含相同的报告。
  • 导出:导出打开对话框,询问我要导出到哪种格式。一旦我做出选择,它就会执行与 print 相同的功能,然后转到后端,然后什么也没有。再次按导出会打开一个新选项卡,其中包含报告。
  • 缩放/更改页面 - 这两个选项都会弹出一个对话框、一个微调器,然后冻结页面。

无论我使用哪种浏览器(IE、Chrome、Mozilla),我都会得到相同的行为,并且所有浏览器都关闭了弹出窗口阻止程序。

使用 Chrome 的开发者工具时,我确实在页面上遇到了两个错误:

  • JobHistory:59[导致此错误的 HTML 由脚本生成。] 遇到不匹配的情况。忽略标签。
  • JobHistory:59[导致此错误的 HTML 由脚本生成。] 遇到不匹配的情况。忽略标签。

我尝试过的其他项目:

  • 删除了所有以前版本的 Crystal Reports
  • 卸载并重新安装 Crystal Reports 的 beta 2
  • 从头开始重新启动我的解决方案,最初它是 2008 年的升级。
  • Cross 在 Crystal Reports beta 2 论坛上发布了这个问题

非常感谢您对我可以尝试的事情的任何想法或建议。

【问题讨论】:

    标签: asp.net-mvc visual-studio-2010 crystal-reports printing


    【解决方案1】:

    Crystal Report 的 Report Viewer 控件是一个服务器端控件,因此,它在作为 MVC 视图页面的一部分时无法正常工作。因此,当我尝试打印或导出导致回发时,我会不断看到页面刷新,而不是打印或导出。

    此行为不同于我在 Visual Studio 2008 中使用的 ASP.NET MVC 版本 1 以及随 VS2008 提供的 Crystal Reports 版本。在 VS2010 以及 Crystal Reports 2010 目前的 beta 版本中,报表查看器控件需要位于普通的旧 aspx 页面上,而不是 MVC 视图页面的一部分。

    为了实现这一点,我采取了以下步骤,其中许多步骤与我之前在相关问题中使用的步骤相同,但我已针对 VS2010 和 CrystalReports 2010 中看到的新行为进行了调整:StackOverflow.com: CrystalReportViewer Buttons Broken using MVC Framework

    • 在我的控制器中,我调用了对我的模型的正确调用来获取我的报告数据,

    List<JobSummaryBody> body = model.GetJobSummaryBody(jobId, startDate, endDate);

    • 接下来,我为报表本身创建一个变量,在本例中:

    JobSummaryByDate summary = new JobSummaryByDate();

    注意:JobSummaryByDate 是我在设计报表时由 Crystal Reports 创建的数据类型,它是代码生成的。将其视为您设计的报告将需要的所有数据。

    • 接下来我为刚刚创建的报表设置数据源、行数据

    summary.SetDataSource(body);

    • 最后,我将报表数据存储在 Session 中,并执行 Response.Redirect 到包含 Crystal Reports 查看器的 aspx 页面

    Session["ReportData"] = summary; Response.Redirect("~/CrystalReports/JobSummaryByDateView.aspx");

    注意:我在我的项目中创建了一个名为“CrystalReports”的新顶级文件夹,该文件夹实际上可以通过 URL 导航到。

    • JobSummaryByDateView.asp 的源页面非常简洁,添加水晶报表查看器,在这种情况下我给它一个报表查看器的 ID:

      <CR:CrystalReportViewer ID="ReportViewer" runat="server" AutoDataBind="true" EnableDatabaseLogonPrompt="False" EnableParameterPrompt="False" ToolPanelView="None" HasDrilldownTabs="False" HasDrillUpButton="False" HasSearchButton="False" HasToggleGroupTreeButton="False" HasToggleParameterPanelButton="False" ReuseParameterValuesOnRefresh="True" />

    • 最后,在页面后面的代码中,我将 ReportViewer.ReportSource 设置为我在控制器中生成的报告数据:

    protected void Page_Init(object sender, EventArgs e) { ReportViewer.ReportSource = Session["ReportData"]; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多