Возникла такая ситуация: необходимо распечатать пакет документов, в частности счетов-фактур.
Мы решили её примерно таким способом:
Код: Выделить всё
// create main report
StiReport stiReport = new StiReport()
{
NeedsCompiling = false,
IsRendered = true,
};
// clear blank page
stiReport.RenderedPages.Clear();
// create sub report
StiReport subReport = new StiReport();
subReport.Load("test.mrt"); // load report <--- если перенести эту строку в первую строку цикла foreach, то всё работает, как ожидалось
// numbers list for a test
List<int> numbers = new List<int>() { 111, 222, 333 };
// traverse through the list
foreach (int x in numbers)
{
subReport.Dictionary.Variables["AVar_0"].Value = x.ToString(); // set report variable
subReport.Dictionary.Synchronize(); // synch dictionary
// render sub report
subReport.Render(false);
// add rendered pages
foreach (StiPage repPage in subReport.RenderedPages)
{
repPage.Report = stiReport; // set main report as a container
stiReport.RenderedPages.Add(repPage); // add each page of the report to the main report
}
subReport.RenderedPages.Clear(); // drop rendered pages
subReport.IsRendered = false; // drop rendered flag
}
// show final report
stiReport.Show();
При это, если вызывать метод Load каждый раз перед рендерингом (методом Render), то всё работает, как ожидалось.
В вышеуказанном примере на каждой из трёх страниц будет выводится 111, а должно выводится 111 на первой странице, 222 на второй и 333 на третьей. Что мы делаем не так?