Подстановка значения поля отчета в выражение переменной.
-
- Сообщения: 7
- Зарегистрирован: 14 май 2014, 14:53
Подстановка значения поля отчета в выражение переменной.
Добрый день.
Для начала оговорюсь, что честно поискал в мануалах и форуме, но решения не нашел.
Суть в следующем: создаю в словаре переменную, которая должна инициализироваться выражением - фактически ей надо присвоить значение поля, расположенного на ReportSummaryBand. Если в выражении писать Text10.Text, компилятор ругается "Ссылка на объект не указывает на экземпляр объекта." Перепробовал кучу вариантов обращения к содержимому поля - непротык. Как посоветуете обратиться к полю из редактора текста выражения переменной?
Спасибо.
Для начала оговорюсь, что честно поискал в мануалах и форуме, но решения не нашел.
Суть в следующем: создаю в словаре переменную, которая должна инициализироваться выражением - фактически ей надо присвоить значение поля, расположенного на ReportSummaryBand. Если в выражении писать Text10.Text, компилятор ругается "Ссылка на объект не указывает на экземпляр объекта." Перепробовал кучу вариантов обращения к содержимому поля - непротык. Как посоветуете обратиться к полю из редактора текста выражения переменной?
Спасибо.
Re: Подстановка значения поля отчета в выражение переменной.
Здравствуйте.
Есть компонент шаблона, который содержит выражения для вычисления. А есть компоненты, которые находятся уже на страницах отрендеренного отчёта.
Во время построения отчета движок генератора отчетов берёт выражение из компонента шаблона, вычисляет его и записывает полученное значение в компонент на странице, которая в текущий момент рендерится.
Если текстовый компонент находится на бэнде, то на страницах отрендеренного отчёта будет столько же экземпляров компонента с таким именем, сколько строк в источнике данных бэнда.
Поэтому с помощью выражения {Text10.Text} вы получите текстовое значение выражения, которое содержится в шаблоне отчёта, а не в построенном отчёте.
Далее, надо знать, в каком месте и в какое время вы хотите использовать значение.
Значение выражения высчитывается в момент рендеринга данного компонента (кроме сумм по бэнду/странице, которые высчитываются после полного построения бэнда/отчета).
Порядок обработки компонентов определяется деревом отчета: чем выше компонент в дереве, тем раньше построится.
Поэтому возможны следующие варианты:
1. Если вы хотите получить значение компонента до его отрисовки, то надо: либо использовать такое же выражение, как в компоненте, либо использовать два прохода (на первом рассчитать, на втором использовать).
2. Если значение будет использоваться после отрисовки компонента, можно в событии GetValue компонента получить нужное значение и сохранить его в переменной для дальнейшего использования.
3. Ещё один вариант - после построения всего отчета, в событии EndRender пробежаться по всем компонентам построенного отчёта и сделать необходимые вычисления.
Вот пример скрипта, который подсчитывает сумму по странице для специфического случая - у бэнда установлено свойство Can Break и заранее неизвестно, на какой странице окажется текстовый компонент.
Более конкретные рекомендации мы сможем дать, если вы пришлёте нам пример отчёта, который воспроизводит вашу проблему.
Спасибо.
Для начала давайте разберёмся с понятиями.Андрей Сакольчик писал(а):Для начала оговорюсь, что честно поискал в мануалах и форуме, но решения не нашел.
Суть в следующем: создаю в словаре переменную, которая должна инициализироваться выражением - фактически ей надо присвоить значение поля, расположенного на ReportSummaryBand. Если в выражении писать Text10.Text, компилятор ругается "Ссылка на объект не указывает на экземпляр объекта." Перепробовал кучу вариантов обращения к содержимому поля - непротык. Как посоветуете обратиться к полю из редактора текста выражения переменной?
Есть компонент шаблона, который содержит выражения для вычисления. А есть компоненты, которые находятся уже на страницах отрендеренного отчёта.
Во время построения отчета движок генератора отчетов берёт выражение из компонента шаблона, вычисляет его и записывает полученное значение в компонент на странице, которая в текущий момент рендерится.
Если текстовый компонент находится на бэнде, то на страницах отрендеренного отчёта будет столько же экземпляров компонента с таким именем, сколько строк в источнике данных бэнда.
Поэтому с помощью выражения {Text10.Text} вы получите текстовое значение выражения, которое содержится в шаблоне отчёта, а не в построенном отчёте.
Далее, надо знать, в каком месте и в какое время вы хотите использовать значение.
Значение выражения высчитывается в момент рендеринга данного компонента (кроме сумм по бэнду/странице, которые высчитываются после полного построения бэнда/отчета).
Порядок обработки компонентов определяется деревом отчета: чем выше компонент в дереве, тем раньше построится.
Поэтому возможны следующие варианты:
1. Если вы хотите получить значение компонента до его отрисовки, то надо: либо использовать такое же выражение, как в компоненте, либо использовать два прохода (на первом рассчитать, на втором использовать).
2. Если значение будет использоваться после отрисовки компонента, можно в событии GetValue компонента получить нужное значение и сохранить его в переменной для дальнейшего использования.
3. Ещё один вариант - после построения всего отчета, в событии EndRender пробежаться по всем компонентам построенного отчёта и сделать необходимые вычисления.
Вот пример скрипта, который подсчитывает сумму по странице для специфического случая - у бэнда установлено свойство Can Break и заранее неизвестно, на какой странице окажется текстовый компонент.
Код: Выделить всё
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();
}
Спасибо.
-
- Сообщения: 7
- Зарегистрирован: 14 май 2014, 14:53
Re: Подстановка значения поля отчета в выражение переменной.
Благодарю за развернутый ответ.
Пример отчета приаттачил. Переменная Condition1 планируется для использования в дочерних отчетах в качестве фильтра для источника данных.
А, вообще, если несу чушь, то прошу простить - в голове пока полная каша. Никогда раньше не занимался построением отчетов.
Пример отчета приаттачил. Переменная Condition1 планируется для использования в дочерних отчетах в качестве фильтра для источника данных.
В моем случае поле, из которого надо записать в переменную содержит константу (просто текст), ее вычислять не требуется.Есть компонент шаблона, который содержит выражения для вычисления. А есть компоненты, которые находятся уже на страницах отрендеренного отчёта.
Экземпляр поля Text1, по идее, в отрендеренном отчете создается один.Если текстовый компонент находится на бэнде, то на страницах отрендеренного отчёта будет столько же экземпляров компонента с таким именем, сколько строк в источнике данных бэнда.
А, вообще, если несу чушь, то прошу простить - в голове пока полная каша. Никогда раньше не занимался построением отчетов.
- Вложения
-
- smpl_rep.mrt
- (8.95 КБ) 343 скачивания
Re: Подстановка значения поля отчета в выражение переменной.
Здравствуйте.
А что вам мешает задать значение переменной, а потом её отобразить в Text1?
Спасибо.
А что вам мешает задать значение переменной, а потом её отобразить в Text1?
Спасибо.
-
- Сообщения: 7
- Зарегистрирован: 14 май 2014, 14:53
Re: Подстановка значения поля отчета в выражение переменной.
Да, спасибо, я до этого уже сам допер. И, все-таки, в будущем, наверное, может возникнуть потребность использовать вычисленные или статические значения полей отчета.А что вам мешает задать значение переменной, а потом её отобразить в Text1?
Re: Подстановка значения поля отчета в выражение переменной.
Здравствуйте.
Ответ на ваш вопрос зависит от конкретной ситуации. Как правило проще использовать аналогичное выражение либо переменную.
Спасибо.
Ответ на ваш вопрос зависит от конкретной ситуации. Как правило проще использовать аналогичное выражение либо переменную.
Спасибо.