2011-08-31 1 views
0

사용자에게 페이지 된 데이터 목록을 표시하는 표가있는 웹 응용 프로그램이 있습니다. 사용자는 결과를 Excel 스프레드 시트로 다운로드하는 옵션이 필요합니다. 그러나 그리드에 표시된 항목은 말했듯이 Paged이며 전체 결과 집합이 필요합니다. 또한 스프레드 시트에는 항목에 대한 20 개 이상의 필드가 모두 포함되지만 항목 당 약 7 개의 필드 만 표시합니다. 그래서, 나는 grid-to-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 ??? format = "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

나는 이전과 비슷한 것을 시도했다. (그리드 뷰를 사용하지는 않았지만). 작동하는 동안 파일을 열기 전에 사용자에게 Excel 통합 문서가 올바른 형식이 아님을 알리는 메시지가 표시되었습니다. –