【问题标题】:Crystal Reports in ASP.NET MVCASP.NET MVC 中的水晶报表
【发布时间】:2010-09-25 19:33:31
【问题描述】:

我知道在 ASP.NET MVC 中不允许使用服务器端控件,但是我们有一长串水晶报告,该公司已经为我想用于我们的以前的应用程序生成了这些报告新的 ASP.NET MVC 应用程序。

在 ASP.NET MVC 中是否有合适的方式使用水晶报表?如果有,怎么做?

【问题讨论】:

    标签: asp.net-mvc crystal-reports


    【解决方案1】:

    我们在工作中遇到过类似的情况。

    我们使用的解决方案:

    • 为报告创建一个单独的目录
    • 为报告创建普通的 ASPX 页面

    我们没有发现此设置有任何问题(除了普通的 Crystal 问题)。

    【讨论】:

    • 如何从路由中排除目录?
    • 其实我刚查过。无需修改路线。
    • 如果您在asp.net MVC中添加了水晶报表,那么您是否遇到过刷新水晶报表的问题?您是否遇到过“验证视图状态 MAC 失败错误”?
    • 你必须以某种方式处理这种方法的授权。
    • @Vikas 你在用那个“CrystalReportSource”吗?如果是这样,请使用 ReportDocument 并保存您的报告文档,也许会更好
    【解决方案2】:

    其实很简单。只需将以下引用添加到您的 MVC 项目:

    • CrystalDecisions.CrystalReports.Engine
    • CrystalDecisions.ReportSource
    • CrystalDecisions.Shared

    使用 Action 方法如下:

    • C#:

      using CrystalDecisions.CrystalReports.Engine;
      
      public ActionResult Report()
          {
              ReportClass rptH = new ReportClass();
              rptH.FileName = Server.MapPath("[reportName].rpt");
              rptH.Load();
              rptH.SetDataSource([datatable]);
              Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
              return File(stream, "application/pdf");   
          }
      
    • VB.NET:

       Imports CrystalDecisions.CrystalReports.Engine
      
       Public Function Report() As ActionResult
          Dim rptH As New ReportClass()
          rptH.FileName = Server.MapPath("[reportName].rpt")
          rptH.Load()
          rptH.SetDataSource([datatable])
          Dim stream As IO.Stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat)
          Return File(stream, "application/pdf")
       End Function
      

    【讨论】:

    • 不错 - 非常优雅(水晶报告和优雅在同一对话中 - 提示世界末日)
    • stackoverflow.com/questions/4294762/… 了解您可能需要的更多信息。 (我做到了!)
    • 终于开始实施了。 Coudlnt' 已经更容易了,谢谢!
    • 考虑从rdlc转回水晶
    • 使用 impersonate = true 添加多个表时,它运行良好,但出现“数据库登录失败”。
    【解决方案3】:

    只需添加此参考:使用 CrystalDecisions.CrystalReports.Engine;
    比做这个动作:

    using CrystalDecisions.CrystalReports.Engine;  
        public ActionResult Report()
                {
                    List<Table> table = new List<Table>();
                    ReportDocument rd = new ReportDocument();
                    rd.Load(Path.Combine(Server.MapPath("~/Repport/CrystalReport1.rpt")));
    
                    Response.Buffer = false;
                    Response.ClearContent();
                    Response.ClearHeaders();
                    Stream stream = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
                    stream.Seek(0, SeekOrigin.Begin);
    
    
                    return File(stream, "application/pdf", "Suivie Historique.pdf");
    
    
                }
    

    【讨论】:

    • 来自审核队列:我可以请求您在源代码周围添加一些上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。
    猜你喜欢
    • 2021-04-11
    • 2012-02-02
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多