web-dev-qa-db-ja.com

ASP.NET MVCのCrystal Reports

サーバーサイドコントロールの使用はASP.NET MVCでは禁止されていることは承知していますが、新しいASPに利用したい以前のアプリケーション用に会社が既に作成しているクリスタルレポートの長いリストがあります。 NET MVCアプリケーション。

ASP.NET MVCでCrystalレポートを使用する適切な方法はありますか?もしそうなら、どうですか?

35
Odd

職場でも同じような状況がありました。

私たちが使用するソリューション:

  • レポート用に別のディレクトリを作成する
  • レポート用の通常のASPXページを作成する

この設定では、(通常のCrystal以外の)問題は見られません。

15
leppie

実際にはかなりシンプルです。 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
    
74
coderguy123

この参照を追加するだけです: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");


            }
1
Sofia