Динамическое создание отчета с использованием Frxuserdataset

отредактировано August 2011 Раздел: FastReport 4.0
Здравствуйте!
Создаю отчет динамически с использованием frxUserDataSet. За основу взял пример с распечаткой StringList'а из демонстрации. Возникла проблема с обработкой события OnGetValue.
Код следующий:
procedure TForm1.Button1Click(Sender: TObject);
begin
  frxReport1.ShowReport;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  frxDBDataset1: TfrxDBDataset;
  frxDesigner1: TfrxDesigner;
  Page: TfrxReportPage;
  DataBand: TfrxMasterData;
  Memo: TfrxMemoView;
begin
  sl := TStringList.Create;
  sl.Add('1');
  sl.Add('2');
  sl.Add('3');
  sl.Add('4');
  sl.Add('5');
  sl.Add('6');
  sl.Add('7');
  sl.Add('8');
  sl.Add('9');

  frxReport1 := TfrxReport.Create(nil);
  frxReport1.CreateUniqueName;
  frxReport1.OnGetValue := frxReport1GetValue;
  frxUserDataSet1 :=  TfrxUserDataSet.Create(nil);
  frxUserDataSet1.Name := 'frxUserDataSet';
  frxUserDataSet1.RangeEnd := reCount;
  frxUserDataSet1.RangeEndCount := sl.Count;
  Page := TfrxReportPage.Create(frxReport1);
  Page.CreateUniqueName;
  Page.SetDefaults;
  DataBand := TfrxMasterData.Create(Page);
  DataBand.CreateUniqueName;
  DataBand.DataSet := frxUserDataSet1;
  DataBand.Height := 20;
  Memo := TfrxMemoView.Create(DataBand);
  Memo.CreateUniqueName;
  Memo.Height := 20;
  Memo.Width := 20;
  Memo.Text := 'element';
  frxReport1.DataSets.Add(frxUserDataSet1);
  frxReport1.EnabledDataSets.Add(frxUserDataSet1);
end;

procedure TForm1.frxReport1GetValue(const VarName: String;
  var Value: Variant);
var
  i: integer;
begin
    if CompareText(VarName, 'element') = 0 then
      Value := sl[frxUserDataSet1.RecNo];
end;

Ставлю брекпоинт в событии frxReport1GetValue. Но остановки в этом событии не происходит. И в отчете в мемо элементе остается текст 'element'. Такое впечатление, что это событие не обрабатывается frxReport1. Подскажите что я делаю не так.
Или посоветуйте как решить эту проблему.

Комментарии

  • gpigpi
    отредактировано 01:19
    Memo.Text := '[element]';
  • отредактировано 01:19
    Спасибо большое! Помогло. А почему именно такое значение у мемо должно быть, т.е. с квадратными скобками? Для того что-бы FastReport воспринимал его как переменную?
  • gpigpi
    отредактировано 01:19
    написал:
    А почему именно такое значение у мемо должно быть, т.е. с квадратными скобками? Для того что-бы FastReport воспринимал его как переменную?
    Да
  • отредактировано 01:19
    спасибо большое за помощь

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

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