2017-02-10 6 views
0

フォームにTDBChartコンポーネントがあり、Checkboxes-Legendを使用してシリーズの表示を切り替えます。最大5つのシリーズを見ることができます - これは私の定義です。グラフをスピードアップするために、私は可視シリーズのデータ​​だけをデータベースからロードしようとしています。TDBChart:データをロードせずに凡例をロード

しかし、凡例にすべてのアイテムを含めるには、定義されたデータセットとフィールド名ですべてのシリーズを定義する必要があります。

この場合、グラフには不可視の列についての例外があります。

グラフデータとは別の凡例を読み込むことはできますか?

+0

「DataSource:= nil;」を選択しなかったシリーズに割り当てようとしましたか? – Yeray

+0

@ Yeray:はい、それは役に立ちません。シリーズにデータがロードされると、DataSourceプロパティの状態に関係なくその事実を忘れてデータを要求しません。 – Paul

+1

選択されていないときにシリーズデータをクリアすることができます – Yeray

答えて

0

は、次の例では、私がテストDataSource(TeeChartに同梱されてTeeChart Proのデータベース)に接続された2つのシリーズを作成しました。
チャートOnClickLegendイベントを使用して、アクティベートされていないときにデータを再表示すると(CheckDataSource)、シリーズをクリアします
注意OnAfterDrawイベントを使用して各シリーズCountを表示しています。

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; 
関連する問題