0

我正在做一个基本的 MVC 应用程序,我正在尝试将我的 SQL 查询的值导出到 Excel。当我打开 Excel 文件时,作为 JOIN 一部分的 2 个字段是空的,我不明白为什么,因为当我单击 DataSet 上的预览数据时,我看到了正确的结果。

在此处输入图像描述

但在我的 Excel 文件中,我没有看到 TitleDescription 和 TeamDescription。

在此处输入图像描述

我的 SQL 查询:选择 Emp.EmployeeID、Emp.FirstName、Emp.LastName、Ti.TitleDescription、Te.TeamDescription、Emp.Phone FROM 员工 Emp JOIN Titles Ti ON Emp.TitleID=Ti.TitleID JOIN Teams Te ON Emp.TeamID=团队ID

我的方法:

    public ActionResult Reports(string ReportType)
    {
        LocalReport localreport = new LocalReport();
        localreport.ReportPath = Server.MapPath("~/Reports/EmployeeReport.rdlc");

        ReportDataSource reportDataSource = new ReportDataSource();
        reportDataSource.Name = "EmployeeReportDataSet";
        reportDataSource.Value = db.Employees.ToList();
        localreport.DataSources.Add(reportDataSource);       
        string mimeType;
        string encoding;
        string fileNameExtension = "XLSX";
     
        string[] streams;
        Warning[] warnings;
        byte[] renderedByte;
        renderedByte = localreport.Render("EXCELOPENXML", null, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
        Response.AddHeader("content-disposition", "attachment; filename=employee_report." + fileNameExtension);
        return File(renderedByte, fileNameExtension);

    }

我相信我的问题来自 reportDataSource.Value = db.Employees.ToList(); 我应该使用 DataTable1 而不是Employees,但我不确定如何。如果有人可以帮助我,我将不胜感激。

谢谢,

4

1 回答 1

0

我发现了问题所在,

首先,我使用了 DataSet TableAdapter 而不是 DataSet Query,并且我使用了默认生成的方法,即 GetData() 方法。我把它放在 DataSource.Value=

这是我更正的代码:

        public ActionResult Reports(string ReportType)
    {
    
        EmployeeReportDataSet employeeReportDataSet = new EmployeeReportDataSet();

        EmployeeReportDataSetTableAdapters.TempReportTableAdapter employeereportTableAdapter =
            new EmployeeReportDataSetTableAdapters.EmployeesReportsTableAdapter();

      employeereportTableAdapter.Fill(employeeReportDataSet.TempReport);

        LocalReport localreport = new LocalReport();
        localreport.ReportPath = Server.MapPath("~/Reports/EmployeeReport.rdlc");

        ReportDataSource reportDataSource = new ReportDataSource();
        reportDataSource.Name = "EmployeeReportDataSet";
        reportDataSource.Value = employeereportTableAdapter.GetData(); 
        localreport.DataSources.Add(reportDataSource);       
        string mimeType;
        string encoding;
        string fileNameExtension = "XLSX";
     
        string[] streams;
        Warning[] warnings;
        byte[] renderedByte;
        renderedByte = localreport.Render("EXCELOPENXML", null, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
        Response.AddHeader("content-disposition", "attachment; filename=employee_report." + fileNameExtension);
        return File(renderedByte, fileNameExtension);

    }
于 2020-10-06T11:29:28.617 回答