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


Проблема

У меня есть 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. Погуглил по аналогичным проблемам, ничего не удалось найти
  2. Установка DefaultValue на e.Parameters["LiabilityDate"].Values.First() не сработала, так как значение не было получено.

Вот и все, потому что я понятия не имею ...


Резюме

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

enter image description here

0
imBlue 5 Окт 2018 в 14:56

1 ответ

Лучший ответ

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

Я создал еще один 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 для этой строки, и все сработало!

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

0
imBlue 5 Окт 2018 в 13:01