Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据源对象在Crystal报表中无效_C#_Asp.net_Crystal Reports - Fatal编程技术网

C# 数据源对象在Crystal报表中无效

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.

我正在使用asp.net mvc 4和Crystal Report制作收据,其中数据存储在MSSQL数据库中,用户可以将收据下载为pdf文件。出于某种原因,每次我尝试下载时都会出错

CrystalDecisions.CrystalReports.Engine.DataSourceException:数据源对象无效

这是代码

    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");
}