How to render client report definition files (.rdlc) directly to the Response stream without preview(转)
Note: I cover this technique in a more recent post here : Rendering an RDLC directly to the Response stream in ASP.NET MVC
A ReportViewer control is normally used to open a report definition file, process it and load it into the viewing area.
The example below renders the report in PDF format. The other report types available when using the LocalReport.Render method are “Excel”and “Image”.
LocalReport localReport = new LocalReport();
localReport.ReportPath = Server.MapPath("~/Report.rdlc");
//A method that returns a collection for our report
//Note: A report can have multiple data sources
List<Employee> employeeCollection = GetData();
//Give the collection a name (EmployeeCollection) so that we can reference it in our report designer
ReportDataSource reportDataSource = new ReportDataSource("EmployeeCollection", employeeCollection);
localReport.DataSources.Add(reportDataSource);
//The DeviceInfo settings should be changed based on the reportType
//http://msdn2.microsoft.com/en-us/library/ms155397.aspx
" <OutputFormat>PDF</OutputFormat>" +
" <PageWidth>8.5in</PageWidth>" +
" <PageHeight>11in</PageHeight>" +
" <MarginTop>0.5in</MarginTop>" +
" <MarginLeft>1in</MarginLeft>" +
" <MarginRight>1in</MarginRight>" +
" <MarginBottom>0.5in</MarginBottom>" +
renderedBytes = localReport.Render(
//Clear the response stream and write the bytes to the outputstream
//Set content-disposition to "attachment" so that user is prompted to take an action
Response.ContentType = mimeType;
Response.AddHeader("content-disposition", "attachment; filename=foo." + fileNameExtension);
Note that if you change the ReportType in the Render method, you will also have to change the DeviceInfo settings