NOTE: using .NET models to view data on the report (i am not using DataSet here)
public ActionResult ExportInvoice(int ID)
{
ReportDocument rd = new ReportDocument();
rd.Load(Path.Combine(Server.MapPath("~/Areas/Sales/Reports/rptSalesInvoice.rpt")));
//rd.SetDataSource(rptInvoiceDetailList);
var invoiceDetails = _salesInvoiceService.GetTempVoucherDetailsByTempVoucherID(ID);
List<rptSalesInvoiceDetails> rptInvoiceDetailList = new List<rptSalesInvoiceDetails>();
foreach (var aDetails in invoiceDetails)
{
rptSalesInvoiceDetails rptSalesInvoice = new rptSalesInvoiceDetails();
rptSalesInvoice.ItemName = aDetails.ItemName;
rptInvoiceDetailList.Add(rptSalesInvoice);
}
rd.Database.Tables[0].SetDataSource(rptInvoiceDetailList);
var rptSalesInvoiceInfoList = new List<rptSalesInvoiceInfo>();
var basicInfo = new rptSalesInvoiceInfo();
basicInfo.TotalAmount = 500;
rptSalesInvoiceInfoList.Add(basicInfo);
rd.Database.Tables[1].SetDataSource(rptSalesInvoiceInfoList);
//rd.ReportSource = rd;
Response.Buffer = false;
Response.ClearContent();
Response.ClearHeaders();
Stream stream = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
stream.Seek(0, SeekOrigin.Begin);
return File(stream, "application/pdf", "SalesInvoicePDF-" + ID+".pdf");
}