Page (Как обратиться к конкретной странице)

отредактировано April 2013 Раздел: FastReport 4.0
Пожалуйста, подскажите. Я уже замучался.
Создаю отчет через дизайнер, вверху GroupHeader, ниже табличка, а еще ниже график, выводится отчет нормально:
         DataModule1.frxReport1.LoadFromFile(sPath+'\Reports\'+MySelectedReport.fFileReport,true);
         DataModule1.frxReport1.Report.DataSet:=nil;
         DataModule1.frxReport1.PrepareReport(true);

         CoSeasonReport; //вот здесь проблема с графиками

         DataModule1.frxReport1.ShowReport(true);

В процедуре CoSeasonReport создаю графики (TfrxChart):
  
  Page1 := DataModule1.frxReport1.FindObject('Page1') as TfrxReportPage;

  Chart1 := DataModule1.frxReport1.FindObject('Chart1') as TfrxChartView;
  for ...
  MyPage:=Page1 //???????????

  Charti:= TfrxChartView.Create(MyPage);
  MyLineseries:=TLineSeries.Create(Charti);
   ...
   Charti.Chart.AddSeries(MyLineseries);
   SerT1:= Charti.SeriesData.Add;
Графики создаются нормально, НО выводятся только на первой странице один под другим (виден только последний - т.е. верхний).
Как мне разместить графики на всех уже созданных (благодаря StartNewPage=true GroupHeader) страницах.
Не хотелось бы по другому, поскольку все уже готово, нужно только каждый график выводить на следующей странице MyPage:=? (но не создавая новых страниц, т.к. там уже есть таблицы)
4c5e8fc1796ct.jpg 4c5e8fc1796ct.jpg

Комментарии

  • отредактировано 15:24
    Создавайте чат на нужном бенде
    Charti:= TfrxChartView.Create(НУЖНЫЙ БЭНД);
    
  • отредактировано 15:24
    DimaBr написал: »
    Создавайте чат на нужном бенде
    Charti:= TfrxChartView.Create(НУЖНЫЙ БЭНД);
    

    Спасибо, но это проблему не решает. Все ChartView создаются на всех страницах (для восьми страниц 8*8=64 ChartView) и на всех страницах виден один и тот же график (последний). Для каждой страницы должна быть своя таблица и свой график. Пока что таблицы разные, а график - один.
    Таблицы создаются без кода (просто набросал компоненты на отчет). Графики в цикле хочу вывести на этот отчет с таблицами
  • отредактировано 15:24
    У вас 8 страниц в дизайнере ?
  • отредактировано 15:24
    DimaBr написал: »
    У вас 8 страниц в дизайнере ?

    Одна - Page1. 8 и больше получается в программе
  • отредактировано 15:24
    Если у вас 8 страниц в готовом отчёте и 1 страница шаблона(дизайнера), то поместите ОДИН график на нужный бэнд.
  • отредактировано April 2013
    А подскажите, пожалуйста, как потом добавлять данные в график или какой бэнд нужный?. Я добавляю в график серии вот так:
      for iMonth:=1 to DataModule1.odSetCoSeasonMonth.RecordCount do begin
        DataModule1.odSetCoSeasonGS.First;
        for iGS:=1 to DataModule1.odSetCoSeasonGS.RecordCount do begin
    
    MyPage:= TfrxReportPage.Create(DataModule1.frxReport1);     //MyPage:= Page1
    Charti:= TfrxChartView.Create(MyPage);                                 //Charti:= TfrxChartView.Create(MyGroupFooter);
    MyLineseries:=TLineSeries.Create(Charti);
    MyLineseriesT:=TLineSeries.Create(Charti);
           begin
              DataModule1.odSetSeasonSeries.Close;
              DataModule1.odSetSeasonSeries.SQL.Text:='select * from V_CO_SEASON '
                  +' where CURR_MONTH = '+DataModule1.odSetCoSeasonMonth.FieldByName('CURR_MONTH').AsString
                  +' and CURR_YEAR = '+IntToStr(iCURR_YEAR)
                  +' and MGRID = '+DataModule1.odSetCoSeasonGS.FieldByName('MGRID').AsString
                  +' order by DATEM ';
              DataModule1.odSetSeasonSeries.Open;
              DataModule1.odSetSeasonSeries.First;
              sx:=''; sy:=''; syT:='';
              while not DataModule1.odSetSeasonSeries.Eof do
                begin
                  if not DataModule1.odSetSeasonSeries.FieldByName('V').IsNull then
                    begin
                      sx:=sx+DataModule1.odSetSeasonSeries.FieldByName('CURR_DAY').AsString+';';
                      sy:=sy+DataModule1.odSetSeasonSeries.FieldByName('V').AsString+';';
                    end;
                  if not DataModule1.odSetSeasonSeries.FieldByName('TEMP').IsNull then
                    syT:=syT+DataModule1.odSetSeasonSeries.FieldByName('TEMP').AsString+';';
                  DataModule1.odSetSeasonSeries.Next;
                end;
              CoSeasonReportMemo(MyPage,1);
              if sx<>'' then
                begin
    
                  MyLineseries.Title:='V '+IntToStr(iCURR_YEAR);
                  Charti.Chart.AddSeries(MyLineseries);
                  SerV1 := Charti.SeriesData.Add;
                  with SerV1 do
                    begin
                      DataType:= dtFixedData;
                      XSource := sx;
                      YSource := sy;
                      XType:=xtNumber;
                    end;
                 end;
              if syT<>'' then
                begin
                  MyLineseriesT.Title:='Tïîâ '+IntToStr(iCURR_YEAR);
                  MyLineseriesT.Color:=MyLineseries.Color;
                  Charti.Chart.AddSeries(MyLineseriesT);
                  SerT1:= Charti.SeriesData.Add;
                  with SerT1 do
                    begin
                      DataType:= dtFixedData;
                      XSource := sx;
                      YSource := syT;
                      XType:=xtNumber;
                    end;
                end;
    ...
    
    Если Charti:= TfrxChartView.Create(MyGroupFooter), то все графики добавляются на ПЕРВЫЙ (GroupFooter1), а затем повторяются на каждой странице
    d1cecfea2c8c.png
    Chart в дизайнере нужен только для того, чтобы перетащить оттуда свойства.
    Верхнюю таблицу в коде не создаю, потому что код выполняется несколько минут (т.к. почти 400 элементов МемоВью на каждой странице)
    Задать правильно серии для Chart в дизайнере так, чтобы они соответствовали таблицам не получается. Если брать данные из бэнда МастерДата1 - выводяться все данные, не ограниченные месяцем

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

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