C# 数据源对象在Crystal报表中无效
我正在使用asp.net mvc 4和Crystal Report制作收据,其中数据存储在MSSQL数据库中,用户可以将收据下载为pdf文件。出于某种原因,每次我尝试下载时都会出错 CrystalDecisions.CrystalReports.Engine.DataSourceException:数据源对象无效 这是代码C# 数据源对象在Crystal报表中无效,c#,asp.net,crystal-reports,C#,Asp.net,Crystal Reports,我正在使用asp.net mvc 4和Crystal Report制作收据,其中数据存储在MSSQL数据库中,用户可以将收据下载为pdf文件。出于某种原因,每次我尝试下载时都会出错 CrystalDecisions.CrystalReports.Engine.DataSourceException:数据源对象无效 这是代码 public ActionResult ExtractReceipt() { var getOwner = rentdb.OwnerRegs.
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");
}
我的代码有什么错误吗?我如何解决这个问题?谢谢。请试试这个
var query=rentdb.Invoices.Where(a => a.owner_id == getId).FirstOrDefault();
var querylist = new List<Invoices> { query };
rd.SetDataSource(querylist);
var query=rentdb.Invoices.Where(a=>a.owner\u id==getId.FirstOrDefault();
var querylist=新列表{query};
rd.SetDataSource(querylist);
您需要将FirstOrDefault()更改为ToList()
尝试将对象包装到数组中。如果使用的是列表,请先尝试将其转换为数组(使用.ToArray()方法)。不,我没有使用报告列出记录。它只会获取一条记录。我认为此行返回的是多条记录,而不是一条:rentdb.Invoices.Where(a=>a.owner\u id==getId)。FirstOrDefault()不,我的数据库中现在只有一条记录,并且我的数据库中的每一条记录的id都是唯一的。这是一个好的解决方案。首先将一项转换为列表是一个重要步骤。
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");
}