Использование значения выражения в переменной

Текстовые компоненты, кроме текста, могут содержать выражения. В момент построения компонента, выражение  обрабатывается генератором отчетов, т.е. производиться его вычисление. За исключением, итоговых сумм по бэнду или странице. В этом случае, результат высчитывается после полного построения бэнда или отчета. Порядок обработки компонентов ядром генератора отчетов определяется иерархией компонентов отчета. Иначе говоря, чем выше компонент в этой иерархии, тем выше его приоритет обработки при построении отчета. Полученное значение (результат вычисления выражения) передается в обработанный (построенный) компонент.

 

Информация

 

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

 

 

 

Иногда возникает необходимость использовать результат выражения (рассчитанное значение) в переменной. Рассмотрим пример. Допустим есть выражение {x+y}, которое расположено в текстовом компонент Text10. Для того чтобы использовать результат этого выражения в переменной недостаточно указать ссылку {Text10.Text}. Потому как обращение, в данном случае, будет не к результату выражения, а к текстовому выражению в шаблоне отчета. Для использования результата выражения в переменной, следует воспользоваться одним из следующих вариантов:

 

strel11 Если необходимо получить значение компонента до его отрисовки, то следует: использовать такое же выражение в переменной, как в компоненте, или использовать два прохода, т.е на первом рассчитать значение, на втором использовать в переменной.

strel11 Если значение будет использоваться после отрисовки компонента, можно в событии GetValue компонента получить необходимое значение и сохранить (передать) его в переменную.

strel11 Также можно после построения всего отчета, в событии EndRender, пробежаться по всем компонентам построенного отчета и сделать необходимые вычисления. Ниже представлен пример скрипта, который подсчитывает сумму по странице, в случае, если у бэнда установлено свойство Can Break и заранее неизвестно, на какой странице окажется текстовый компонент.

 

C#

...

foreach (StiPage page in RenderedPages)

           {

              StiText sumComp = null;

              foreach (StiComponent component in page.Components)

               {

                  if (component.Name == "sum_comp")

                   {

                       sumComp = component as StiText;

                      break;

                   }

               }

 

              double sum = 0;

              foreach (StiComponent comp in page.Components)

               {

                  if (comp.Name == "aaa")

                   {

                       sum += (double)(comp as StiText).TagValue;

                   }

               }

               sumComp.Text = sum.ToString();

           }

...