首页 > 解决方案 > 从 ViewModel 和字符串类型的 Image 属性将 Image 动态绑定到 Crystal Report

问题描述

我在视图模型中加入了 3 个表(员工、部门、指定)。并跟进 BLL,DAL 模式是 asp.net。

我的问题是我想根据他们独特的 EmployeeId 生成个别员工的报告。不知何故,我设法检索了除Image之外的每个员工的信息。图像设置为数据库作为 ImageLocation

员工报告VM.cs

public class EmployeeReportVM
{
    public string Image { get; set; }
    public string EmployeeName { get; set; }
    public string EmployeeId { get; set; }
    public string Department { get; set; }
    public string Designation { get; set; }
    public string Grade { get; set; }
    public string BloodGroup { get; set; }
    public string Phone { get; set; }
    public string JoiningDate { get; set; }
}

EmployeeDAL.cs

public List<EmployeeReportVM> EmployeeReport(string employeeId)
    {
        var emp = (from e in db.Employees
                   join de in db.Designation on e.DesignationId equals de.DesignationId
                   join dp in db.Department on e.DepartmentId equals dp.DepartmentId
                   where e.EmployeeId == employeeId
                   select new EmployeeReportVM
                   {
                       Image = e.Image,
                       EmployeeName = e.FirstName + " " + e.LastName,
                       EmployeeId = e.EmployeeId,
                       Department = dp.DepartmentName,
                       Designation = de.DesignationName,
                       Phone = e.MobileNo
                   }).ToList();
        return emp;
    }

EmployeBLL.cs

EmployeeDAL employeeDal = new EmployeeDAL();
public List<EmployeeReportVM> EmployeeReportVM(string employeeId)
    {
        var data = employeeDal.EmployeeReport(employeeId);
        return data;
    }

员工控制器.cs

EmployeeBLL employeeBll=new EmployeeBLL();EmployeeBLL employeeBll=new EmployeeBLL();
public ActionResult DownloadEmployeeReport(string employeeId)
    {
        //ApplicationDbContext db = new ApplicationDbContext();
        var data = employeeBll.EmployeeReportVM(employeeId);
        ReportDocument rd = new ReportDocument();
        rd.Load(Path.Combine(Server.MapPath("~/Reports"), "EmployeeReport.rpt"));
        rd.SetDataSource(data.Select(c => new
        {
            Image = c.Image,
            EmployeeName = c.EmployeeName,
            EmployeeId = c.EmployeeId,
            Department = c.Department,
            Designation = c.Designation
        }).Where(x => x.EmployeeId == employeeId));
        //string pathString = Path.Combine(@"D:\Sayeem\Project\NassaHRMS\Content\Images");
        Response.Buffer = false;
        Response.ClearContent();
        Response.ClearHeaders();
        rd.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Landscape;
        rd.PrintOptions.ApplyPageMargins(new CrystalDecisions.Shared.PageMargins(5, 5, 5, 5));
        rd.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA5;
        //rd.SetDatabaseLogon("root","", "NassaHRMS", "DESKTOP-PN96TKB");
        Stream stream = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
        stream.Seek(0, SeekOrigin.Begin);

        return File(stream, "application/pdf", "EmployeeDetails.pdf");
    }

EmployeeList.cshtml

@using (Html.BeginForm("Edit", "Account", new { id = @item.EmployeeId }, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<a class="btn btn-sm btn-outline-info" target="_blank" href="@Url.Action("DownloadEmployeeReport", "Employee",new { @employeeId = item.EmployeeId})"><i class="fa fa-print" title="Print Card"></i></a>
}

水晶报表的位置 在 此处输入图片描述

标签: asp.netasp.net-mvclinqcrystal-reportsviewmodel

解决方案


我猜你在这里做的一切都是对的。只是picture2图形位置的一些问题。您的数据库图像列包含什么?它是否只包含图像名称,someimage.jpg那么您的图形位置应该如下所示。

D:\Sayeem\Project\NassaHRMS\EmployeeImage\ + NassaHRMS_ViewModels_EmployeeReportVM.Image

如果它包含完整Physical Path的,D:\Sayeem\Project\NassaHRMS\EmployeeImage\someimage.jpg那么您的图形位置应该如下所示

NassaHRMS_ViewModels_EmployeeReportVM.Image

推荐阅读