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 MVC Report Writer application, if you don’t have, then create by referring to the Getting-Started documentation.
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.rdlc
report is used, and it can be downloaded here. Copy and paste the sample RDLC reports into the App_Data/Resources
folder. For more information, see Samples and demos.
Open the HomeController.cs
file in your application and add the Export()
function to load the report as stream. Refer to the following code snippet.
public class HomeController : Controller
{
[HttpPost]
public ActionResult Export(string writerFormat)
{
// Here, we have loaded the Product List.rdlc sample report from application the Resources folder.
FileStream reportStream = new FileStream(System.Web.Hosting.HostingEnvironment.MapPath(@"\App_Data\Resources\Product List.rdlc"), FileMode.Open, FileAccess.Read);
......
}
}
Initialize the Report Writer instance with created reportStream
and Set the value of the ReportProcessingMode
property value ProcessingMode.Local
to 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 DataSources
as 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
Name
is case sensitive and it should be same as in the data source name in the report definition and theValue
accepts IList, DataSet, and DataTable inputs.
You can use the Save
method 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 ActionResult Export(string writerFormat)
{
// Here, we have loaded the Product List.rdlc sample report from application the Resources folder.
FileStream reportStream = new FileStream(System.Web.Hosting.HostingEnvironment.MapPath(@"\App_Data\Resources\Product List.rdlc"), FileMode.Open, FileAccess.Read);
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.