Сегодня мы осветим один из наиболее часто задаваемых нашими пользователями вопросов – как включить кэширование отчета из кода?

Типичная ошибка

Итак, за кэширование отчета отвечает свойство ReportCacheMode, которое пользователи зачастую включают перед загрузкой отчета. Пример:
StiReport report = new StiReport();
report.ReportCacheMode = StiReportCacheMode.On;
report.Load(path);
В этом случае, кэширование отчета не будет включено, и вот почему. Искомое свойство ReportCacheMode, как и большинство свойств отчета, сохраняется в шаблоне отчета. Поэтому значение, установленное перед загрузкой отчёта, будет перезаписано значением из шаблона.

Решение

Таким образом, для включения кэширования отчета из кода, необходимо установить свойство ReportCacheMode в On не перед, а ПОСЛЕ загрузки отчёта.

Соответственно, код будет выглядеть следующим образом:
StiReport report = new StiReport();
report.Load(path);
report.ReportCacheMode = StiReportCacheMode.On;

Технические нюансы

Еще один часто задаваемый вопрос: свойство ReportCacheMode не записано в шаблоне, но оно всё равно устанавливается в Off после загрузки отчёта. Почему?

Для уменьшения размера файла шаблона, при сохранении в него записываются только те свойства, значения которых отличаются от значения по умолчанию. А перед загрузкой шаблона в методе report.Load() большинство свойств автоматически устанавливаются в значение по умолчанию. И уже в процессе загрузки шаблона свойства устанавливаются в значения из шаблона.

Поэтому, если свойство будет изменено перед загрузкой отчета, оно всё равно установится в значение по умолчанию перед загрузкой отчета.
Используя этот сайт, вы соглашаетесь на использование файлов Cookie для аналитики и персонализированного контента. Файлы Cookie хранят полезную информацию на вашем компьютере, чтобы помочь нам повысить эффективность и удобство использования. Для получения дополнительной информации, пожалуйста, прочтите Конфиденциальность и Использование Cookie.