TDBChart:加载图例而不加载数据

时间:2017-02-10 13:54:30

标签: teechart

我在表单上有TDBChart组件,Checkboxes-Legend用于切换系列'可视性。最多可以看到5个系列 - 这是我的定义。为了加快图表,我试图从数据库加载可见系列的数据。

但是为了在图例中包含所有可能的项目,我需要定义所有系列,并定义数据集和字段名称。

在这种情况下,图表让我不知道有关隐藏系列的缺席列的例外情况。

是否可以加载与图表数据分开的图例?

1 个答案:

答案 0 :(得分:0)

在以下示例中,我创建了两个连接到测试DataSource的系列(TeeChart附带的 TeeChart Pro数据库)。 我在非活动状态时清除系列(Clear),并在重新激活数据时使用图表CheckDataSource事件刷新数据(OnClickLegend)。
注意我正在使用Count事件显示每个系列OnAfterDraw

uses Series, CandleCh;

var
  Table1, Table2: TTable;
  barSeries: TBarSeries;
  candleSeries: TCandleSeries;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DBChart1.View3D:=False;
  DBChart1.Legend.CheckBoxes:=True;
  DBChart1.MarginLeft:=10;

  Table1:=TTable.Create(Self);
  Table1.DatabaseName:='TeeChart Pro Database';
  Table1.TableName:='Employee';

  Table2:=TTable.Create(Self);
  Table2.DatabaseName:='TeeChart Pro Database';
  Table2.TableName:='Stock';

  barSeries:=DBChart1.AddSeries(TBarSeries) as TBarSeries;
  candleSeries:=DBChart1.AddSeries(TCandleSeries) as TCandleSeries;

  with barSeries do
  begin
    DataSource:=Table1;
    YValues.ValueSource:='SALARY';
    XLabelsSource:='LASTNAME';
    HorizAxis:=aTopAxis;
  end;

  DBChart1.Axes.Top.Grid.Visible:=False;

  with candleSeries do
  begin
    VertAxis:=aRightAxis;
    DataSource:=Table2;
    YValues.ValueSource:='DATE';
    OpenValues.ValueSource:='OPEN';
    HighValues.ValueSource:='HIGH';
    LowValues.ValueSource:='LOW';
    CloseValues.ValueSource:='CLOSE';
  end;

  Table1.Active:=True;
  Table2.Active:=True;
end;

procedure TForm1.DBChart1ClickLegend(Sender: TCustomChart; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var i: Integer;
begin
  if barSeries.Active then
     barSeries.CheckDataSource
  else
     barSeries.Clear;

  if candleSeries.Active then
     candleSeries.CheckDataSource
  else
     candleSeries.Clear;
end;

procedure TForm1.DBChart1AfterDraw(Sender: TObject);
begin
  Caption:='Bar: ' + IntToStr(barSeries.Count) + ' values, Candle: ' + IntToStr(candleSeries.Count) + ' values';
end;