【问题标题】:Report Viewer with two tables带有两个表格的报告查看器
【发布时间】:2019-09-01 02:30:18
【问题描述】:

我在 asp.net mvc 中创建报表查看器。但是我有 2 个表有关系,并且在报告查看器中,当我从其他表中导出报告数据时,不仅仅是名称。 例如我在Expense水里有

但是当我导出时它没有显示在表格中。

这是我的模特:

public class Expenses
{
    [Key]
    public int Expenses_Id { get; set; }
    public string Expenses_Type { get; set; }
}


 public class ExpenseDetails
{
    [Key]
    public int ExpenseDetails_Id { get; set; }

    public double Amount { get; set; }

    public DateTime DateExpense { get; set; }

    public int ExpensesId { get; set; }

    [ForeignKey("ExpensesId")]
    public virtual Expenses expenses { get; set; }
}

这是我的报告代码:

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

        ReportDataSource reportDataSource = new ReportDataSource();
        reportDataSource.Name = "ExpenseDataSet";
        reportDataSource.Value = _context.ExpenseDetails.ToList();
        localreport.DataSources.Add(reportDataSource);

        string reportType = ReportType;
        string mimeType;
        string encoding;
        string fileNameExtension;

        if (reportType == "Excel")
        {
            fileNameExtension = "xlsx";
        }

        if (reportType == "Word")
        {
            fileNameExtension = "docx";
        }

        if (reportType == "PDF")
        {
            fileNameExtension = "pdf";
        }

        else
        {
            fileNameExtension = "jpg";

        }

        string[] streams;
        Warning[] warnings;
        byte[] renderedByte;

        renderedByte = localreport.Render(reportType, "", out mimeType, out encoding, out fileNameExtension, out streams, out warnings);

        Response.AddHeader("content-disposition", "attachment;filename = expens_report." + fileNameExtension);

        return File(renderedByte, fileNameExtension);
    }

谢谢。

【问题讨论】:

    标签: c# asp.net-mvc reportviewer


    【解决方案1】:

    您是否刷新了 .rdlc 中的数据集?如果是在添加外键之前创建的,则需要删除 .rdlc 数据集和数据源,然后创建一个新的。

    创建一个 DTO 怎么样?有时更容易创建复杂的对象列表,用您想要的数据填充它并将其发送到 rdlc。在这种情况下,您需要与 rdlc 有一个单独的项目,并添加对主项目的引用。这允许您将 DTO 作为对象导入。

                List<ExpenseDetailsDTO> list = new List<ExpenseDetailsDTO>()
            {
                new ExpenseDetailsDTO
                {
                    Amount = 10,
                    DateExpense = DateTime.UtcNow,
                    ExpenseDetails_Id  = 1,
                    Expenses_Id = 1,
                    Expenses_Type = "asd"
                },
                new ExpenseDetailsDTO
                {
                    Amount = 10,
                    DateExpense = DateTime.UtcNow,
                    ExpenseDetails_Id  = 1,
                    Expenses_Id = 1,
                    Expenses_Type = "asd"
                },
                new ExpenseDetailsDTO
                {
                    Amount = 10,
                    DateExpense = DateTime.UtcNow,
                    ExpenseDetails_Id  = 1,
                    Expenses_Id = 1,
                    Expenses_Type = "asd"
                },
                new ExpenseDetailsDTO
                {
                    Amount = 10,
                    DateExpense = DateTime.UtcNow,
                    ExpenseDetails_Id  = 1,
                    Expenses_Id = 1,
                    Expenses_Type = "asd"
                },
            };
    
    
    
    
            reportDataSource.Name = "testdatasource";
            reportDataSource.Value = list;
            localReport.DataSources.Add(reportDataSource);
    

    在迁移旧 API 时,至少在过去 4 个月里,这样的方法对我有用。

    【讨论】:

    • 谢谢,所以我把这个添加到报表控制器?
    • 不,您需要创建一个包含要显示的字段的类。然后创建该类的对象列表,填充每个 DTO,然后将该列表作为数据源发送到 rdlc。请记住,您需要将 rdlc 放在单独的项目中,并添加主项目的引用,以便添加数据源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多