Export RDLC Report
You can export the RDLC reports that exist on the local file system with custom business object data collection. The following steps demonstrates how to export a RDLC report using Report Writer.
This section requires an ASP.NET Core Report Writer application, if you don’t have, then create by referring to the Getting-Started documentation.
Bind data source in Web API controller
The following steps help you to configure the Web API to render the RDLC report with business object data collection.
-
Create a class and methods that returns business object data collection. Use the following code in your application Web API Service.
public class ProductList { public string ProductName { get; set; } public string OrderId { get; set; } public double Price { get; set; } public string Category { get; set; } public string Ingredients { get; set; } public string ProductImage { get; set; } public static IList GetData() { List<ProductList> datas = new List<ProductList>(); ProductList data = new ProductList() { ProductName = "Baked Chicken and Cheese", OrderId = "323B60", Price = 55, Category = "Non-Veg", Ingredients = "grilled chicken, corn and olives.", ProductImage = "" }; datas.Add(data); data = new ProductList() { ProductName = "Chicken Delite", OrderId = "323B61", Price = 100, Category = "Non-Veg", Ingredients = "cheese, chicken chunks, onions & pineapple chunks.", ProductImage = "" }; datas.Add(data); data = new ProductList() { ProductName = "Chicken Tikka", OrderId = "323B62", Price = 64, Category = "Non-Veg", Ingredients = "onions, grilled chicken, chicken salami & tomatoes.", ProductImage = "" }; datas.Add(data); return datas; } } -
In this tutorial, the
Product List.rdlcreport is used, and it can be downloaded here. Copy and paste the sample RDLC reports into thewwwroot/Resourcesfolder. For more information, see Samples and demos. -
Create a folder
Resourcesinto thewwwrootfolder in your application. Copy and paste the sample RDLC reports into theResouresfolder. -
Open the
HomeController.csfile in your application and add theExport()function to load the report as stream. Refer to the following code snippet.public class HomeController : Controller { // IWebHostEnvironment used with sample to get the application data from wwwroot. private Microsoft.AspNetCore.Hosting.IWebHostEnvironment _hostingEnvironment; // IWebHostEnvironment initialized with controller to get the data from application data folder. public HomeController(Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment) { _hostingEnvironment = hostingEnvironment; } [HttpPost] public IActionResult Export(string writerFormat) { // Here, we have loaded the Product List.rdlc sample report from application the Resources folder. FileStream inputStream = new FileStream(_hostingEnvironment.WebRootPath + @"\Resources\Product List.rdlc", FileMode.Open, FileAccess.Read); MemoryStream reportStream = new MemoryStream(); inputStream.CopyTo(reportStream); reportStream.Position = 0; inputStream.Close(); ...... } } -
Initialize the Report Writer instance with created
reportStreamand Set the value of theReportProcessingModeproperty valueProcessingMode.Localto provide the dataset collection for that RDLC report.BoldReports.Writer.ReportWriter writer = new BoldReports.Writer.ReportWriter(); writer.ReportProcessingMode = ProcessingMode.Local; -
Bind the business object data values collection by adding a new item to the
DataSourcesas in the following code snippet.//Pass the dataset collection for report writer.DataSources.Clear(); writer.DataSources.Add(new BoldReports.Web.ReportDataSource { Name = "list", Value = ProductList.GetData() });Data source
Nameis case sensitive and it should be same as in the data source name in the report definition and theValueaccepts IList, DataSet, and DataTable inputs. -
You can use the
Savemethod in Report Writer to generate the export document along with information of the report stream, it will return the generated file as Stream.[HttpPost] public IActionResult Export(string writerFormat) { // Here, we have loaded the Product List.rdlc sample report from application the Resources folder. FileStream inputStream = new FileStream(_hostingEnvironment.WebRootPath + @"\Resources\Product List.rdlc", FileMode.Open, FileAccess.Read); MemoryStream reportStream = new MemoryStream(); inputStream.CopyTo(reportStream); reportStream.Position = 0; inputStream.Close(); BoldReports.Writer.ReportWriter writer = new BoldReports.Writer.ReportWriter(); writer.ReportProcessingMode = ProcessingMode.Local; // Pass the dataset collection for report writer.DataSources.Clear(); writer.DataSources.Add(new BoldReports.Web.ReportDataSource { Name = "list", Value = ProductList.GetData() }); string fileName = null; WriterFormat format; string type = null; if (writerFormat == "PDF") { fileName = "Product List.pdf"; type = "pdf"; format = WriterFormat.PDF; } else if (writerFormat == "Word") { fileName = "Product List.docx"; type = "docx"; format = WriterFormat.Word; } else if (writerFormat == "CSV") { fileName = "Product List.csv"; type = "csv"; format = WriterFormat.CSV; } else { fileName = "Product List.xlsx"; type = "xlsx"; format = WriterFormat.Excel; } writer.LoadReport(reportStream); MemoryStream memoryStream = new MemoryStream(); writer.Save(memoryStream, format); // Download the generated export document to the client side. memoryStream.Position = 0; FileStreamResult fileStreamResult = new FileStreamResult(memoryStream, "application/" + type); fileStreamResult.FileDownloadName = fileName; return fileStreamResult; } -
Now, the RDLC report exported successfully in your application.