2011-08-31 77 views
0

我有一个Web应用程序,它具有一个向用户显示分页数据列表的网格。用户需要选择将结果下载到Excel电子表格中。然而,网格中显示的项目,就像我所说的,Paged,我需要整个结果集。另外,我只显示每个项目大约7个字段,而电子表格将包含项目的所有20+个字段。所以,我不是在寻找一个网格到Excel的解决方案。从ReportViewer和SQL Server创建Excel文件报告

我正在尝试做一些我以前曾经用过的东西。在以前的雇主(源代码不可用)中,我们有一个包含SQL Server报告的应用程序作为RDLC文件。我们将在代码中创建一个ReportViewer控件(var reportViewer = new ReportViewer())。然后,我们将报告绑定到控件,给它一个数据源,然后以我们需要的任何格式呈现结果。在我的情况下,我需要一个Excel文件,然后将ExcelFile流回到用户的响应中。

我使用的是MVC3,因此我将把Excel文件作为FileContentResult返回。我一直在搜索互联网一天,无法找到我要找的东西。

回答

1

控制器动作。格式参数应该是'EXCEL'。

public FileResult Report(String format) 
    { 
     LocalReport report = new LocalReport(); 
     report.ReportPath = Server.MapPath("~/TestReport.rdlc"); 

     report.DataSources.Clear(); 
     report.DataSources.Add(new ReportDataSource(GetData())); 

     report.Refresh(); 

     return GetFileContentResult(report, format, null, "TestReport"); 
    } 

从任何报告创建FileContentResult的助手方法。

public FileContentResult GetFileContentResult(Report report, String format, String deviceInfo, String fileDownloadName) 
    { 
     String mimeType; 
     String encoding; 
     String filenameExtension; 
     String[] streamIds; 
     Warning[] warnings; 

     FileContentResult fileContentResult = new FileContentResult(report.Render(format, deviceInfo, out mimeType, out encoding, out filenameExtension, out streamIds, out warnings), mimeType); 
     fileContentResult.FileDownloadName = Path.ChangeExtension(fileDownloadName, filenameExtension); 

     return fileContentResult; 
    } 

编辑:忘记调用帮助功能。哎呀。

+0

这工作。谢谢阿德里安! –

+0

嗨@Adrian Toman和格式PDF?格式= “PDF” ;? – Danilo

0

您可以尝试像下面这样...我们填补对象的列表,从我们的数据访问级别,然后传递对象的该列表类似下面的...

public static byte[] SaveExcelData<T>(List<T> answer) 
{ 
    byte[] fileData = null; 

    var grid = new System.Web.UI.WebControls.GridView(); 

    grid.DataSource = answer; 
    grid.DataBind(); 

    HttpContext.Current.Response.ClearContent(); 
    string headerAddition = "attachment; filename="; 
    headerAddition += answer[0].GetType().Name + ".xls"; 
    HttpContext.Current.Response.AddHeader("content-disposition", headerAddition); 
    HttpContext.Current.Response.ContentType = "application/excel"; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 
    grid.RenderControl(htw); 

    fileData = System.Text.Encoding.UTF8.GetBytes(sw.ToString()); 

    return fileData; 
} 
+0

我曾尝试过这样的事情(虽然我没有使用gridview)。当它工作时,它在打开文件之前提示用户,说Excel工作簿的格式不正确。 –