通过ViewModel和字符串类型Image Property将图像动态绑定到Crystal Report

问题描述

我在一个视图模型中加入了3个表(Employee,Department,Designation)。并跟踪BLL,DAL模式是asp.net。

我的问题是我想根据单个雇员的唯一EmployeeId生成单个雇员的报告。 我设法以某种方式检索了除图片以外的每位员工的信息。 图像已设置为数据库,作为图像位置

EmployeeReportVM.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;
    }

EmployeeController.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));
        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>
}

水晶报表的位置 enter image description here

解决方法

我想您在这里所做的一切都正确。 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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...