4

我开发了一个应用程序,我从数据库中获取数据,将其绑定到 Infragistics 网格,然后使用其导出实用程序下载 excel 。

当数据集很大时(比如 20000 条记录或更多),这种方法存在问题,处理和下载需要很长时间,通常会死页并向用户显示空白页。

有没有更好的方法来处理这个问题并在 excel下载过程中做出合理的改进?

代码如下所示:

    public void LoadExcelPostingData()
        {
            try
            {
                query = "Some complex query here with up to 10 columns";
                dt.Clear();
                dt = new DataTable();
                db2.GetDataTable(query, CommandType.Text, ref dt);

                grdJurdata.DataSource = dt;
                grdJurdata.DataBind();

                ExportToExcel();
            }
            catch (Exception ex)
            {
                lblresult.Text = "Grd Err : " + ex.Message;
            }

        }  
   private void ExportToExcel()
        {
            try
            {
                // Infragistics built in excel export utility
                UltraWebGridExcelExporter2.Export(grdJurdata);            
            }
            catch (Exception ex)
            {  }

        }
4

2 回答 2

2

关于文件下载微软的MSDN提供了详细的解释

  • 得到响应
  • 使用响应,将内容类型设置为“APPLICATION/OCTET-STREAM”(这意味着没有应用程序可以打开文件)。
  • 将标题设置为“Content-Disposition”、“attachment; filename=\”” + + “\””。
  • 将文件内容写入响应。
  • 关闭响应。

还要记住,永远不要使用 Ajax 请求来下载文件,因为对于文件传输,它需要完整的 PostBack 请求
这是 MSDN 上给出的示例代码

<%
try
{
   System.String filename = "myFile.txt";

   // set the http content type to "APPLICATION/OCTET-STREAM
   Response.ContentType = "APPLICATION/OCTET-STREAM";

   // initialize the http content-disposition header to
   // indicate a file attachment with the default filename
   // "myFile.txt"
   System.String disHeader = "Attachment; Filename=\"" + filename +
      "\"";
   Response.AppendHeader("Content-Disposition", disHeader);

   // transfer the file byte-by-byte to the response object
   System.IO.FileInfo fileToDownload = new
      System.IO.FileInfo("C:\\downloadJSP\\DownloadConv\\myFile.txt");
   Response.Flush();
   Response.WriteFile(fileToDownload.FullName);}
catch (System.Exception e)
// file IO errors
{
   SupportClass.WriteStackTrace(e, Console.Error);
}
%>



我还建议您阅读这个很好的讨论

编辑#1:您的情况的另一个解决方案是创建一个新页面来保存 UltraWebGridExcelExporter,并在您的主页中创建一个 iframe 标记来保存该新页面。让 iframe 回发。并将您的 Infgraistics 版本升级到最新版本。

于 2013-06-14T07:30:57.973 回答
0

首先,您需要重新查看您编写的代码。您需要重构或改进代码库。

如果你想增加请求超时,那么你可以这样做你需要在 web.config 中添加更多的超时持续时间

   <system.web>
        <httpruntime executionTimeout="4800"/> //or higher values
    </system.web>
于 2013-06-14T07:26:26.967 回答