2008-12-08 7 views
32

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

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

Répondre

13

Nous avions une situation similaire au travail.

La solution que nous utilisons:

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

Nous n'avons pas vu tous les problèmes (en plus de celles normales de cristal) avec cette configuration.

+3

Comment exclure-vous le répertoire des routes? – Odd

+0

En fait, je viens de vérifier. Pas besoin de modifier l'itinéraire. – leppie

+0

Si vous avez ajouté un rapport Crystal dans asp.net MVC, avez-vous rencontré un problème avec le rapport Refreshing Crystal? Avez-vous dû faire face à la "Validation de l'erreur MAC de viewstate MAC"? – Vikas

70

C'est en fait assez simple. il suffit d'ajouter des références suivantes à votre projet MVC:

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

Utiliser la méthode d'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 
    
+19

Nice - très élégant (rapports Crystal et élégant dans la même conversation - cue fin du monde) – Basic

+0

Si cela fonctionne, c'est une solution fantastique, merci – Yablargo

+0

http : //stackoverflow.com/questions/4294762/crystal-reports-for-visual-studio-2010-error pour plus d'informations dont vous pourriez avoir besoin. (J'ai fait!) – Yablargo

0

il suffit d'ajouter cette référence: en utilisant CrystalDecisions.CrystalReports.Engine;
que 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

** De la file d'attente **: Puis-je vous demander d'ajouter un peu de contexte autour de votre code source. Les réponses au code seulement sont difficiles à comprendre. Cela aidera le demandeur et les futurs lecteurs à la fois si vous pouvez ajouter plus d'informations dans votre message. – RBT