SSRS - подотчет в подотчете - PullRequest
       22

SSRS - подотчет в подотчете

0 голосов
/ 05 октября 2018

Я создаю отчет, который пользователь может экспортировать, и я столкнулся с некоторыми трудностями.Я хотел бы получить информацию от кого-то, поскольку я начинаю немного сереть.


Проблема

У меня есть CalcTable, в которой родительские строки хранятся для CalcTableMonthly.Для извлечения строк из CalcTable я использую идентификатор LeaseID.Тогда из-за наличия нескольких строк в CalcTable под одним LeaseID и каждая строка в CalcTable будет иметь несколько месячных значений в CalcTableMonthly.

MainReport получает значения из CalcTable через LeaseID.

SubReport1 получает значения из CalcTableMonthly через снова LeaseID.Эти значения являются комбинацией всех доступных CalcTable строк, которые имеют значения в CalcTableMonthly.

Затем, наконец, SubReport2 получает все объединенные значения за этот месяц.Поэтому я должен передать LeaseID и Month из SubReport1.

Так что вы можете видеть, что он работает до уровня 2.

enter image description here

Загрузка страницы

 protected void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
        {
            // Get LeaseID from query string
            sqls_Summary.SelectParameters["LeaseID"].DefaultValue = Request["LeaseID"];
            // Set report path
            this.rep_Main.LocalReport.ReportPath = "Reports\\CalculationReports\\rpt_Summary_Export.rdlc";
            // Set Report DataSources
            this.rep_Main.LocalReport.DataSources.Add(new ReportDataSource("dsLeaseCalculations", sqls_Summary));
            this.rep_Main.LocalReport.DataSources.Add(new ReportDataSource("dsLeaseCalculationsMonths", sqls_Summary_Months));
            this.rep_Main.LocalReport.DataSources.Add(new ReportDataSource("dsLeaseCalculationsViewMonth", sqls_Summary_ViewMonth));
            // Set the subreport processing event.
            this.rep_Main.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(subReportProccessingFunc);
            this.rep_Main.LocalReport.Refresh();
        }

    }

Событие обработки подотчета

public void subReportProccessingFunc(object sender, SubreportProcessingEventArgs e)
    {
        sqls_Summary_Months.SelectParameters["LeaseID"].DefaultValue = e.Parameters["prmLeaseID"].Values.First();
        e.DataSources.Add(new ReportDataSource("dsLeaseCalculationsMonths", sqls_Summary_Months));

        sqls_Summary_ViewMonth.SelectParameters["LeaseID"].DefaultValue = e.Parameters["prmLeaseID"].Values.First();
        sqls_Summary_ViewMonth.SelectParameters["Month"].DefaultValue = // What to put here????
        e.DataSources.Add(new ReportDataSource("dsLeaseCalculationsViewMonth", sqls_Summary_ViewMonth));
    }

Из приведенного выше кода строки sqls_Summary_ViewMonth.SelectParameters["Month"].DefaultValue = Я не уверен, как обработать.Как я могу получить месяц из текущей строки в отчете RDLC?

Вещи, которые я пробовал

  1. Поиск в Google схожих проблем, не смог ничего найти
  2. Установка DefaultValue на e.Parameters["LiabilityDate"].Values.First(), не работала, так как не былаподбирая значение.

Вот и все, поскольку я понятия не имею ...


Резюме

Iиметь 1 основной отчет, этот основной отчет имеет подотчет, который имеет другой подотчет.Чтобы получить подотчет, я передаю значение LeaseID только ему.Первый подотчет также требует только LeaseID НО , второй подотчет, который находится в первом подотчете, требует LeaseID И в месяц.Я не уверен, как получить переменную этого месяца в подотчете в RDLC, поскольку она работает в rdl в построителе отчетов, как показано на рисунке ниже , но, к сожалению, не работает, когда я использую ее в ASP.net

enter image description here

1 Ответ

0 голосов
/ 05 октября 2018

Через некоторое время, немного повозившись и отойдя от своего стола, я подумал и подумал о решении.

Я создал еще один SubreportProcessingEventHandler в первой функции.

public void subReportProccessingFunc(object sender, SubreportProcessingEventArgs e)
{
   sqls_Summary_Months.SelectParameters["LeaseID"].DefaultValue = 
   e.Parameters["prmLeaseID"].Values.First();
   e.DataSources.Add(new ReportDataSource("dsLeaseCalculationsMonths", 
   sqls_Summary_Months));

   this.rep_Main.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(subReportProccessingFunc1);
}

public void subReportProccessingFunc1(object sender, SubreportProcessingEventArgs e)
{
   sqls_Summary_ViewMonth.SelectParameters["LeaseID"].DefaultValue = e.Parameters["prmLeaseID"].Values.First();
   sqls_Summary_ViewMonth.SelectParameters["Month"].DefaultValue = e.Parameters["prmMonth"].Values.First();
   e.DataSources.Add(new ReportDataSource("dsLeaseCalculationsViewMonth", sqls_Summary_ViewMonth));
}

Итак, однаждыпервый подотчет обрабатывается, второй снова действует как основной отчет, а вместо него обрабатывается другой подотчет.Мне удалось выбрать значение prmMonth для этой строки, и все заработало!

Надеюсь, это поможет любому, кто наткнется на это!

...