Средство просмотра отчетов с двумя таблицами - PullRequest
0 голосов
/ 10 апреля 2019

Я создаю средство просмотра отчетов в 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);
    }

Спасибо.

1 Ответ

0 голосов
/ 10 апреля 2019

Вы обновили набор данных в .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);

Нечто подобное работало для меня, по крайней мере, в течение последних 4 месяцев при переносе старого API.

...