Reputation: 2188
I'm using asp.net mvc 4
and Crystal Report
to make a receipt where datas are stored in MSSQL db and user can download the receipt as pdf file. For some reason, everytime I try to download, I get an error,
CrystalDecisions.CrystalReports.Engine.DataSourceException: The data source object is invalid.
Here are the codes,
public ActionResult ExtractReceipt()
{
var getOwner = rentdb.OwnerRegs.Where(a => a.username == User.Identity.Name).FirstOrDefault();
var getId = getOwner.serial;
ReportDocument rd = new ReportDocument();
rd.Load(Path.Combine(Server.MapPath("~/Reports/Invoice.rpt")));
rd.SetDataSource(rentdb.Invoices.Where(a => a.owner_id == getId).FirstOrDefault());
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", "MyReceipt.pdf");
}
Is there anything wrong in my code? How can I solve this issue? Thanks.
Upvotes: 1
Views: 2752
Reputation: 1
You Need To Change FirstOrDefault() to ToList();
public ActionResult ExtractReceipt()
{
var getOwner = rentdb.OwnerRegs.Where(a => a.username ==
User.Identity.Name).FirstOrDefault();
var getId = getOwner.serial;
ReportDocument rd = new ReportDocument();
rd.Load(Path.Combine(Server.MapPath("~/Reports/Invoice.rpt")));
rd.SetDataSource(rentdb.Invoices.Where(a => a.owner_id == getId).ToList()); //FirstOrDefault() Need To Change
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", "MyReceipt.pdf");
}
Upvotes: 0
Reputation: 3125
Please try this
var query=rentdb.Invoices.Where(a => a.owner_id == getId).FirstOrDefault();
var querylist = new List<Invoices> { query };
rd.SetDataSource(querylist);
Upvotes: 3