Как создать TfrxChartView в коде?

Я использую Fast Reports 4.13.1. Мне нужно отобразить несколько диаграмм в моем сводном диапазоне, и я пытаюсь их динамически создавать в обработчике событий OnBeforePrint группы. Проблема в том, что диаграммы создаются правильно, в серии не отображаются данные, которые я добавляю к ним. Здесь мое событие OnBeforePrint:

var
 dsSections,
 dsTests,
 dsHistory: TfrxDataSet;
 Chart: TfrxChartView;
 ChartCount: Integer; 
begin
 dsSections := Report.GetDataSet('frdTestSections');
 dsTests := Report.GetDataSet('frdResults');
 dsHistory := Report.GetDataSet('frdTestHistory');
 ChartCount := 0;
 dsSections.First;
 while not dsSections.Eof do
 begin
 dsTests.First;
 while not dsTests.Eof do
 begin
 if dsHistory.RecordCount > 0 then
 begin
 Chart := TfrxChartView.Create(rsHistory);
 Chart.Left := (ChartCount mod 2) * 8 + 1;
 Chart.Top := (ChartCount div 2) * 5 + 0.5;
 Chart.Width := 8;
 Chart.Height := 5;
 Chart.Chart.Title.Text.Text := dsTests.Value('Name');
 Chart.Chart.View3D := False;
 Chart.AddSeries(csLine);
 dsHistory.First;
 while not dsHistory.Eof do
 begin
 ShowMessage(dsTests.Value('Name') + #13#10 + IntToStr(dsHistory.RecNo + 1) + ' ' +dsHistory.Value('Result')); // this is for debugging only
 Chart.Series[0].Add(dsHistory.Value('Result'), IntToStr(dsHistory.RecNo + 1), clBlue); 
 dsHistory.Next;
 end; 
 Inc(ChartCount); 
 end;
 dsTests.Next;
 end;
 dsSections.Next;
 end; 
end;

Что мне не хватает? Есть ли какое-либо свойство TfrxChartView, я должен установить, что я ommiting?

2 ответа

вы можете использовать XValues ​​и YValues ​​of SeriesData вместо Chart.Series [0].Add

//.....
 while not dsHistory.Eof do
 begin
 Chart.SeriesData[0].XValues := Chart.SeriesData[0].XValues + IntToStr(dsHistory.RecNo + 1) + ';';
 Chart.SeriesData[0].YValues := Chart.SeriesData[0].YValues + FloatToStr(dsHistory.Value('Result')) + ';';
 dsHistory.Next;
 end;
//.....


В вашем коде отсутствует некоторая настройка сразу после создания Series[0]:

  • Свойство Datatype, чтобы установить, поступают ли его данные из dtDBData, dtBandData или dtFixedData.
    • если он dtDBData, тогда вы должны установить его свойство DataSet
    • если это dtBandData, тогда вы должны установить его свойство DataBand
  • свойства XSource и YSource
  • и, наконец, его свойство Active

licensed under cc by-sa 3.0 with attribution.