报表查看器有两个表

问题描述 投票:0回答:1

我在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个回答
0
投票

您是否在.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个月里。

© www.soinside.com 2019 - 2024. All rights reserved.