web-dev-qa-db-fra.com

Crystal Reports dans ASP.NET MVC

Je sais que l'utilisation des contrôles côté serveur est un non-non dans ASP.NET MVC, mais nous avons une longue liste de rapports Crystal que la société a déjà produits pour une application précédente que j'aimerais utiliser pour notre nouvel ASP. Application NET MVC.

Existe-t-il un moyen approprié d'utiliser les rapports Crystal dans ASP.NET MVC? Si c'est le cas, comment?

35
Odd

Nous avons eu/avons une situation similaire au travail.

La solution que nous utilisons:

  • Créer un répertoire séparé pour les rapports
  • Créer des pages ASPX normales pour les rapports

Nous n'avons vu aucun problème (à part ceux de Crystal normaux) avec cette configuration.

15
leppie

C'est assez simple en fait. ajoutez simplement les références suivantes à votre projet MVC:

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

utilisez la méthode Action comme ci-dessous:

  • 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

Ajoutez simplement cette référence: using CrystalDecisions.CrystalReports.Engine;
que de faire cette action:

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