2012-07-20 2 views
6

So bin ich versucht, ohne Öffnen des Berichts in der Runtime-Betrachter meiner Web-Anwendung einen Crystal-Bericht zu PDF exportieren die MethodeExportToHttpResponse Crystal Report ohne Crviewer läuft

ExportToHttpResponse

verwenden. Alles scheint korrekt zu funktionieren, wenn es darum geht, die Parameter zu laden und den Dateinamen/Pfad zum Laden des Berichts zu bekommen. Aber wenn ich den Teil ausführe, der ein Popup-Dialogfeld erstellen soll, das dem Benutzer die Option zum Speichern, Ausführen, Abbrechen für jede Art von Download gibt, passiert nichts. Es wird kein Fehler ausgegeben. es geht nicht über irgendeinen Teil des Codes hinaus, den ich kenne. Es scheint die ExportToHttpResponse-Zeile auszuführen und dann nichts damit zu tun.

protected void ExportRptButton_Click(object sender, EventArgs e) 
     { 
      if (null != SelectedReport) 
      { 
       rptParams.Clear(); 
       rptParams = null; 

       // Get the report document 
       // string filePath = Server.MapPath(@"~\Reports\" + SelectedReport.FileName + ".rpt"); 
       // Declare a new Crystal Report Document object and load the report file into the report document. 
       ReportDocument rptDoc = new CrystalDecisions.CrystalReports.Engine.ReportDocument(); 
       ConfigureCrystalReports(rptDoc); 
       // repDoc.Load(rptFileName); 

       // AddParameters(); 
       // Set the report parameters the report object. 
       LoadParameterFields(rptDoc); 
       // Set the static text fields in the report object. 
       LoadStaticTextFields(rptDoc); 

       try 
       { 
        if (rptDoc.IsLoaded) 
        { 
         // Stop buffering the response 
         Response.Buffer = false; 
         // Clear the response content and headers 
         Response.ClearContent(); 
         Response.ClearHeaders(); 
         Response.ContentType = "application/pdf"; 
         // Export the Report to Response stream in PDF format and file name Customers 
         rptDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "DirectAccessReport"); 
         // rptDoc.ExportToDisk(ExportFormatType.PortableDocFormat, "~/PDF_Folder"); 
         // There are other format options available such as Word, Excel, CVS, and HTML in the ExportFormatType Enum given by crystal reports 
        } 
       } 
       catch (Exception ex) 
       { 
        logger.ErrorFormat("Could not export to pdf! {0}", ex);     
       } 
      } 
     } 

Einige Anmerkungen:

Also ich hatte gehofft, dass mir jemand eine Richtung geben könnte, was ich mit dem Code falsch machen könnte wie folgt zu finden, die LoadParametersFields/LoadStaticTextFields Methoden, die oben angezeigt scheinen zu funktionieren korrekt und wenn der Bericht im CRViewer geöffnet wird, wird der Bericht angezeigt und funktioniert. Obwohl, wenn Sie diese Methoden auch sehen möchten, werde ich sie auf Anfrage werfen.

Die rptParams am Anfang ist ein privat deklariert ist List<ReportParameter>()

die ConfigureCrystalReports Methode verwendet, um den Dateipfad des Berichts zu erhalten und zu laden.

jede Hilfe oder Vorschläge werden sehr geschätzt. Vielen Dank.

+0

Versuchen Sie, 'Response.Flush();' 'nach rptDoc.ExportToHttpResponse' – Icarus

+0

@Icarus ich es versucht, aber es hat keine merkliche Veränderung – James213

Antwort

0

Dieser Beispielcode funktioniert für mich; Sehen Sie sich das Fehlermanagement an.

protected void btnExport_Click(object sender, EventArgs e) 
{ 
    // Stop buffering the response 
    Response.Buffer = false; 
    // Clear the response content and headers 
    Response.ClearContent(); 
    Response.ClearHeaders(); 

    ExportFormatType format = ExportFormatType.PortableDocFormat; 
    string ext = ".pdf"; 
    string reportName= "myreport"; 

    try 
    { 
     reportDocument.ExportToHttpResponse(format, Response, true, reportName); 
    } 
    catch (System.Threading.ThreadAbortException) 
    { 
     //ThreadException can happen for internale Response implementation 
    } 
    catch (Exception ex) 
    { 
     //other exeptions will be managed 
     throw; 
    } 
} 
+0

ich hinzugefügt, um die erwähnte Ausnahme machen aber immer noch nichts geworfen. – James213