2008-12-08 30 views
32

Sé que el uso de controles del lado del servidor es un no-no en ASP.NET MVC, sin embargo, tenemos una larga lista de informes de cristal que la compañía ya ha producido para una aplicación anterior que Me gustaría utilizar para nuestra nueva aplicación ASP.NET MVC.Crystal Reports en ASP.NET MVC

¿Existe una forma adecuada de utilizar informes de cristal en ASP.NET MVC? ¿Si es así, cómo?

Respuesta

13

Tuvimos/tenemos una situación similar en el trabajo.

La solución que utilice:

  • Crear un directorio independiente para los informes
  • Crear páginas normales ASPX para informes

No hemos visto ningún problema (además de los de cristal normales) con esta configuración

+3

¿Cómo excluir el directorio de las rutas? – Odd

+0

En realidad, acabo de comprobar. No es necesario modificar la ruta. – leppie

+0

Si agregó un informe de Crystal en asp.net MVC, ¿ha encontrado el problema del informe Refreshing Crystal? ¿Se ha enfrentado a la "Validación de viewstate MAC failed error"? – Vikas

70

Es bastante simple en realidad. sólo tiene que añadir siguientes referencias a su proyecto MVC:

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

el uso del método de acción, como a continuación:

  • 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

Agradable: muy elegante (informes de Crystal y elegante en la misma conversación, cue end) – Basic

+0

Si esto funciona, esta es una solución fantástica, gracias – Yablargo

+0

http : //stackoverflow.com/questions/4294762/crystal-reports-for-visual-studio-2010-error para obtener más información que pueda necesitar. (¡Lo hice!) – Yablargo

0

Sólo añadir esta referencia: usando CrystalDecisions.CrystalReports.Engine;
de hacer esta acción:

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 cola de revisión **: Puedo solicitarle que agregue un poco de contexto alrededor de su código fuente. Las respuestas de solo código son difíciles de entender. Ayudará al solicitante y a los lectores futuros tanto si puede agregar más información en su publicación. – RBT

Cuestiones relacionadas