【问题标题】:Crystal Reports methods ExportToHttpResponse and ExportToStream hang and never returnCrystal Reports 方法 ExportToHttpResponse 和 ExportToStream 挂起并且永不返回
【发布时间】:2014-11-21 13:28:44
【问题描述】:

我正在排除故障的代码将 Crystal Report ReportDocument 导出到 Excel。大多数情况下,导出工作正常。不幸的是,对于某些数据集,ExportToHttpResponse 方法永远不会返回并导致应用程序挂起。最终出现线程被中止异常以及请求超时。

这是挂起的那一行:

reportDocument.ExportToHttpResponse(ExportFormatType.Excel,Response,True, fileName);

我也尝试使用 ExportToStream from here 也挂起:

System.IO.Stream myStream;
byte[] byteArray;
myStream = boReportDocument.ExportToStream (ExportFormatType.PortableDocFormat);

我尝试了不同的导出格式、重新启动 IIS 等。似乎存在大小限制或可能导致这些方法挂起的特定数据场景。此行为的任何解决方法或解释?谢谢!

【问题讨论】:

    标签: asp.net crystal-reports reportdocument


    【解决方案1】:

    试试这个:

       Public Shared Sub ExportDataSetToExcel(ByVal ds As DataTable, ByVal filename As String)
            Dim response As HttpResponse = HttpContext.Current.Response
            response.Clear()
            response.Buffer = True
            response.Charset = ""
            'response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
            response.ContentType = "application/vnd.ms-excel"
            'response.AddHeader("Content-Disposition", "attachment;filename=""" & filename & ".xls")
    
            Using sw As New StringWriter()
                Using htw As New HtmlTextWriter(sw)
                    Dim dg As New DataGrid()
                    dg.DataSource = ds
                    dg.DataBind()
                    dg.RenderControl(htw)
                    response.Charset = "UTF-8"
                    response.ContentEncoding = System.Text.Encoding.UTF8
                    response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble())
                    response.Output.Write(sw.ToString())
                    response.[End]()
                End Using
            End Using
        End Sub
    

    并在您的查看器中添加:

    DT = New DataTable
    DT = (Your Method)
    ExportDataSetToExcel(DT, "ExportedReport")
    

    还添加:

     Protected Sub Page_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Unload
        ReportObject.Close()
        ReportObject.Dispose()
    End Sub
    

    因此报告不会对已加载报告的数量添加限制。

    【讨论】:

      猜你喜欢
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 2018-09-27
      • 2014-11-11
      • 1970-01-01
      • 2016-08-03
      相关资源
      最近更新 更多