Я создаю отчет, который пользователь может экспортировать, и у меня возникают некоторые трудности. Мне бы очень хотелось, чтобы кто-то сказал, потому что я начинаю немного седеть.
Проблема
У меня есть CalcTable
, в котором хранятся родительские строки для CalcTableMonthly
. Для извлечения строк из CalcTable
я использую идентификатор LeaseID
. Тогда из-за того, что в CalcTable
несколько строк под одним LeaseID
, и каждая строка в CalcTable
будет иметь несколько ежемесячных значений в CalcTableMonthly
.
MainReport
получает значения от CalcTable
через LeaseID
.
SubReport1
получает значения от CalcTableMonthly
снова через LeaseID
. Эти значения представляют собой комбинацию всех доступных строк CalcTable
, которые имеют значения в CalcTableMonthly
.
Затем, наконец, SubReport2
получает все комбинированные значения за этот месяц. Поэтому я должен передать LeaseID
и Month
из SubReport1.
Итак, вы можете видеть, что это работает до уровня 2.
Загрузка страницы
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?
Вещи, которые я пробовал
- Погуглил по аналогичным проблемам, ничего не удалось найти
- Установка DefaultValue на
e.Parameters["LiabilityDate"].Values.First()
не сработала, так как значение не было получено.
Вот и все, потому что я понятия не имею ...
Резюме
У меня есть 1 основной отчет, у этого основного отчета есть вложенный отчет, у которого есть еще один вложенный отчет. Чтобы получить подотчет, я передаю только ему значение LeaseID. Для первого подотчета также требуется только LeaseID НО для второго подотчета, который находится с первым подотчетом, требуется LeaseID И месяц. Я не уверен, как мне получить переменную этого месяца в подотчете в RDLC, поскольку она работает в rdl в построителе отчетов, как видно на изображении ниже , но, к сожалению, не работает, когда я использую ее в ASP.net
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 для этой строки, и все сработало!
Надеюсь, это поможет любому, кто наткнется на это!
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.