如何在代码中创建TfrxChartView?

时间:2013-09-25 12:34:19

标签: delphi delphi-xe2 fastreport

我正在使用快速报告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的任何属性我应该设置我正在省略?

2 个答案:

答案 0 :(得分:2)

创建Series[0]后,您的代码遗漏了一些设置:

  • Datatype媒体资源,用于确定其数据是来自dtDBDatadtBandData还是dtFixedData
    • 如果是 dtDBData ,则应设置其DataSet属性
    • 如果是dtBandData,则应设置其DataBand属性
  • XSourceYSource属性
  • 最后是Active属性

答案 1 :(得分:1)

您可以使用SeriesData的XValues和YValues而不是 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;

//.....