簡體   English   中英

嘗試下載Crystal Report PDF時出錯

[英]Error trying to download Crystal Report PDF

我正在嘗試為我的項目實施Crystal Reports

我的家庭控制器:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Biblioteca.Models;
using CrystalDecisions.CrystalReports.Engine;

namespace Biblioteca.Controllers
{
    public class HomeController : Controller
    {
        private BibliotecaDatabase db = new BibliotecaDatabase();

        public ActionResult Index()
        {
            var totalesviewmodel = new TotalesViewModel();
            totalesviewmodel.MontoCopias = db.AlumnosList.Sum(o => o.Copias);
            totalesviewmodel.MontoImpresiones = db.AlumnosList.Sum(o => o.Impresiones);
            totalesviewmodel.DineroDeposito = db.AlumnosList.Sum(o => o.Deposito);
            totalesviewmodel.DineroSap = db.AlumnosList.Sum(o => o.Sap);
            totalesviewmodel.MontoCopiasMaestro = db.MaestrosList.Sum(o => o.Copias);
            totalesviewmodel.MontoImpresionesMaestro = db.MaestrosList.Sum(o => o.Impresiones);
            return View(totalesviewmodel);
        }

        public ActionResult Reports()
        {
            List<Alumno> allDatos = new List<Alumno>();
            using (BibliotecaEntities dc = new BibliotecaEntities())
            {
                allDatos = dc.Alumnos.ToList();
            }
            return View(allDatos);
        }

        public ActionResult ExportReport()
        {
            List<Alumno> allDatos = new List<Alumno>();
            using (BibliotecaEntities dc = new BibliotecaEntities())
            {
                allDatos = dc.Alumnos.ToList();
            }

            ReportDocument rd = new ReportDocument();
            rd.Load(Path.Combine(Server.MapPath("~/Reports"), "rpt_datos.rpt"));
            rd.SetDataSource(allDatos);

            Response.Buffer = false;
            Response.ClearContent();
            Response.ClearHeaders();

            try
            {
                Stream stream = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
                stream.Seek(0, SeekOrigin.Begin);
                return File(stream, "application/pdf", "DatoList.pdf");
            }
            catch (Exception ex)
            {
                throw;
            }
        }

        public ActionResult Contact ()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }
}

當我嘗試下載報告的PDF文件時,我的項目在以下位置停止:

rd.SetDataSource(allDatos);

出現此錯誤:

mscorlib.dll中發生類型'System.Reflection.TargetInvocationException'的異常,但未在用戶代碼中處理

當我單擊繼續時,瀏覽器會顯示:

ObjectContext實例已被處置,不能再用於需要連接的操作。

我究竟做錯了什么?

這是因為您是在功能代碼塊的using范圍之外編寫此代碼的:

rd.SetDataSource(allDatos);

嘗試將這些代碼行寫入using代碼塊中,或者如果這不是問題,則可以刪除using

希望這可以幫助。

omg,非常感謝,您為我提供了很多幫助!...答案:像這樣在代碼的最后關閉使用block:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Biblioteca.Models;
using CrystalDecisions.CrystalReports.Engine;

namespace Biblioteca.Controllers
{
    public class HomeController : Controller
{
    private BibliotecaDatabase db = new BibliotecaDatabase();

    public ActionResult Index()
    {
        var totalesviewmodel = new TotalesViewModel();
        totalesviewmodel.MontoCopias = db.AlumnosList.Sum(o => o.Copias);
        totalesviewmodel.MontoImpresiones = db.AlumnosList.Sum(o => o.Impresiones);
        totalesviewmodel.DineroDeposito = db.AlumnosList.Sum(o => o.Deposito);
        totalesviewmodel.DineroSap = db.AlumnosList.Sum(o => o.Sap);
        totalesviewmodel.MontoCopiasMaestro = db.MaestrosList.Sum(o => o.Copias);
        totalesviewmodel.MontoImpresionesMaestro = db.MaestrosList.Sum(o => o.Impresiones);
        return View(totalesviewmodel);
    }

    public ActionResult Reports()
    {
        List<Alumno> allDatos = new List<Alumno>();
        using (BibliotecaEntities dc = new BibliotecaEntities())
        {
            allDatos = dc.Alumnos.ToList();
        }
        return View(allDatos);
    }

    public ActionResult ExportReport()
    {
        List<Alumno> allDatos = new List<Alumno>();
        using (BibliotecaEntities dc = new BibliotecaEntities())
        {
            allDatos = dc.Alumnos.ToList();


        ReportDocument rd = new ReportDocument();
        rd.Load(Path.Combine(Server.MapPath("~/Reports"), "rpt_datos.rpt"));
        rd.SetDataSource(allDatos);

        Response.Buffer = false;
        Response.ClearContent();
        Response.ClearHeaders();

        try
        {
            Stream stream = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
            stream.Seek(0, SeekOrigin.Begin);
            return File(stream, "application/pdf", "DatoList.pdf");
        }
        catch (Exception ex)
        {
            throw;
        }
    }

    public ActionResult Contact ()
    {
        ViewBag.Message = "Your contact page.";

        return View();
    }
}
  }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM