Кэширование значений переменных

отредактировано 02:29 Раздел: FastReport 3.0
Доброе время суток, уважаемые!
Столкнулся с такой проблемой:
есть отчет, в список переменных добавлена своя (пользовательская), и ее значение используется в нескольких ДатаБэндах. Само значение этой переменной устанавливается в OnManualBuild.
procedure TForm1.ReportManualBuild(Page: TfrxPage);
var
  i: Byte;
begin
  Report.Engine.ShowBand(TfrxBand(Page.FindObject('Header1')));

  for i := 0 to ListBox1.Items.Count - 1 do
  begin
    Report.Variables['Text1'] := '''';
    Report.Variables['Text1'] := '''' + ListBox1.Items[i] + '''';
    Report.Engine.ShowBand(TfrxBand(Page.FindObject('MasterData1')));
  end;
end;

в лист-боксе следующие значения:
QwErTy
yTrEwQ
qwerty
ytrewq
qwERTY
YtReWq
Qwerty1

Вопрос на засыпку, какие значения будут в отчете?
У меня получается следующее ;) :
QwErTy
yTrEwQ
QwErTy
yTrEwQ
QwErTy
yTrEwQ
Qwerty1

скорее всего, значения для переменной в отчете кэшируются и подставляются ранее введенные (если такие уже были), но как от этого избавиться? (для меня критичен регистр букв)?

Пы.сы. вариант с использованием OnGetValue не предлогать (не подходит он мне)

Комментарии

  • отредактировано 02:29
    Неужели никто не сталкивался с такой проблемой???

    Хотелось бы услышать хоть какие-нибудь пропозиции ;)
  • отредактировано 02:29
    Версия 3.20 - те-же проблемы ;)
  • отредактировано 02:29
    У меня FR 3.21 и таких проблем нет.
    Данные в лист я гружу из БД.
  • отредактировано 02:29
    aseroff написал:
    У меня FR 3.21 и таких проблем нет.
    Данные в лист я гружу из БД.
    при работе с значениями, получаемыми из датасета и у меня проблем нет, ты проверь пож-ста пример, который я написал (именно при присвоении значений пользовательской переменной в OnManualBuild). Cейчас проверю в FR Studio.
  • отредактировано 02:29
    странно, а если использовать скриптовые переменные - то все нормально, ничего не кешируется :
    procedure TForm1.ReportManualBuild(Page: TfrxPage);
    var
      i: Byte;
    begin
      Report.Engine.ShowBand(TfrxBand(Page.FindObject('Header1')));
    
      for i := 0 to ListBox1.Items.Count - 1 do
      begin
    //    Report.Variables['Text1'] := '''';
    //    Report.Variables['Text1'] := '''' + ListBox1.Items[i] + '''';
            Report.Script.Variables['Text1'] := ListBox1.Items[i];
        Report.Engine.ShowBand(TfrxBand(Page.FindObject('MasterData1')));
      end;
    end;
    

    Вопрос как бы закрыт, но хотелось бы услышать мнение разработчиков, почему так происходит.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.