【问题标题】:How to dislay correct x-axis (bottom axis) label from datasource using Teechart (Delphi)如何使用 Teechart(Delphi)从数据源显示正确的 x 轴(底轴)标签
【发布时间】:2019-01-04 20:15:13
【问题描述】:

我想就在堆叠条形图底部显示我的数据源的客户端名称寻求帮助。从我研究的所有示例看来,底部图表轴标签是由 TeeChart 查看数据源“自动”设置的。但是我似乎无法让它工作。下面是我想要实现的目标的图片。

Picture of what I am trying to achieve

我有三个系列'用于构建堆叠图表。我已经包含了我用于每个查询的每个数据源的图片。

Datasources for three series' queries

根据我的研究,我似乎也可以使用DBChart1GetAxisLabel() 来自定义设置标签。但我很难理解如何确保正确的自定义标签名称与我的查询中的正确“客户名称”相关联。

这是我如何构建图表的代码示例:

过程 TfrmSupplierAnalytics.btnOKClick(Sender: TObject); 变量 S,NewTypeStr,测试,clientSql:字符串; var seriasNormalOrders:TBarSeries; var seriasCreditNoteOrders:TBarSeries; var seriasPartialOrders:TBarSeries; N, i : 整数; 开始 qCreditNoteOrders.关闭; qNormalOrders.关闭; qPartialOrders.关闭; qGetClientIdFromName.Close; qClients.关闭; DBChart1.CleanupInstance; DBChart1.ClearChart; 尝试 对于 N := 0 到 clbClients.Items.Count-1 做 如果 clbClients.State[N] = cbChecked 然后开始 测试:=字符串(clbClients.Items[N]); NewTypeStr := NewTypeStr + '(E.clientid = '+ IntToStr(FindClientID(test)) + ')'; clientSql := clientSql + NewTypeStr; NewTypeStr := ' 或 '; 结尾; 除了 在 E 上:例外 ShowMessage(E.ClassName+' 引发错误,带有消息: '+E.消息); 结尾; OpenQueryCreditNoteOrders(clientSql); OpenQueryPartialOrders(clientSql); OpenQueryNormalOrders(clientSql); seriasNormalOrders :=TBarSeries.Create(self); DBChart1.AddSeries(seriasNormalOrders); seriasCreditNoteOrders :=TBarSeries.Create(self); DBChart1.AddSeries(seriasCreditNoteOrders); seriasPartialOrders :=TBarSeries.Create(self); DBChart1.AddSeries(seriasPartialOrders); seriasNormalOrders.MultiBar := mbStacked; seriasCreditNoteOrders.MultiBar := mbStacked; seriasPartialOrders.MultiBar := mbStacked; seriasNormalOrders.Marks.Visible := true; seriasNormalOrders.MarksLocation:= mlCenter; seriasNormalOrders.MarksOnBar := True; seriasNormalOrders.YValues.ValueSource := 'NormalOrders'; seriasNormalOrders.DataSource := qNormalOrders; seriasNormalOrders.Title := '正确的订单'; seriasNormalOrders.Marks.Visible := True; seriasNormalOrders.Marks.AutoPosition := true; seriasCreditNoteOrders.YValues.ValueSource := 'CreditNoteOrders'; seriasCreditNoteOrders.DataSource := qCreditNoteOrders; seriasCreditNoteOrders.Title := '信用票据订单'; seriasPartialOrders.YValues.ValueSource := 'PartialOrders'; seriasPartialOrders.DataSource := qPartialOrders; seriasPartialOrders.Title := '短期订单'; seriasNormalOrders.CheckDataSource; seriasCreditNoteOrders.CheckDataSource; seriasPartialOrders.CheckDataSource; 结尾;

所以,总结一下,我的代码中是否有一些我缺少的设置会在每个堆叠条下方显示“客户端名称”,或者我必须使用自定义标签吗? 如果我必须使用自定义标签,我将不胜感激有关如何确保将数据源中的正确“客户端名称”替换为 DBChart1GetAxisLabel 中正确的 ValueIndex 的一些指导?

提前致谢。

【问题讨论】:

  • 您好 Johan,您能告诉我们您使用的 TeeChart VCL/FMX 是什么吗?
  • 嗨,我正在使用带有 VCL 表单的 Embarcadero RAD Studio XE2。因此,从代码中的使用部分,我看到“VCLTee.*****”正在实施。我正在使用 Steema 版本:TeeChart VCL/FMX 版本 2018 Build 2018.24.180321。

标签: delphi-xe2 teechart


【解决方案1】:

我设法得到了答案。

您可以设置 XLabelsSource 以显示来自 DataSource 的文本,然后将系列 Marks.Style 设置为 smsValue 以强制它显示值而不是显示标签。即:

<pre>
procedure TForm1.FormCreate(Sender: TObject);
var ADOQuery1: TADOQuery;
i: Integer;
begin
ADOQuery1:=TADOQuery.Create(Self);
with ADOQuery1 do
begin
ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data 
Source=TeeChart Pro Database';
SQL.Add('SELECT SALARY, LASTNAME from Employee WHERE LASTNAME='#39'Smith'#39);
end;

for i:=0 to 1 do
with DBChart1.AddSeries(TBarSeries) as TBarSeries do
begin
XLabelsSource:='LASTNAME';
DataSource:=ADOQuery1;
MultiBar:=mbStacked;
YValues.ValueSource:='SALARY';

Marks.Style:=smsValue;
end;

ADOQuery1.Open;
end;
</pre>

我在我的项目中对其进行了测试,它可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2018-12-04
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    相关资源
    最近更新 更多