Как отобразить правильную метку оси X (нижняя ось) из источника данных с помощью Teechart (Delphi)

Я хотел бы попросить некоторую помощь по отображению имени клиента моего источника данных в нижней части моей гистограммы с накоплением. Из всех примеров, которые я исследовал, видно, что метка оси нижнего графика "TeeChart" устанавливает "автоматически", просматривая источник данных. Однако я не могу заставить его работать. Ниже картина того, чего я пытаюсь достичь.

Картина того, чего я пытаюсь достичь

У меня есть три серии, которые я использую для построения диаграммы с накоплением. Я включил изображение каждого источника данных, который я использую для каждого запроса.

Источники данных для запросов трех серий

Из моего исследования кажется, что я также могу использовать DBChart1GetAxisLabel() чтобы настроить ярлыки. Но я изо всех сил пытаюсь понять, как гарантировать, что правильное имя пользовательской метки связано с правильным "именем клиента" из моих запросов.

Вот пример кода того, как я строю диаграммы:

    процедура TfrmSupplierAnalytics.btnOKClick(Отправитель: TObject);
    var
      S,NewTypeStr, test, clientSql: строка;
      var seriasNormalOrders:TBarSeries;
      var seriasCreditNoteOrders:TBarSeries;
      var seriasPartialOrders:TBarSeries;
      N, i: целое число;
    begin
       qCreditNoteOrders.Close;
       qNormalOrders.Close;
       qPartialOrders.Close;
       qGetClientIdFromName.Close;
       qClients.Close;

       DBChart1.CleanupInstance;
       DBChart1.ClearChart; попробуйте N:= 0 для clbClients.Items.Count-1, если clbClients.State[N] = cbChecked, затем начните тест:=  string(clbClients.Items[N]);
              NewTypeStr:= NewTypeStr + '(E.clientid  = '+ 
    IntToStr(FindClientID(test)) + ')';
              clientSql:= clientSql +  NewTypeStr;
              NewTypeStr:= ' or '; конец; кроме E: Exception do
              ShowMessage(ошибка E.ClassName+'с сообщением: 
    '+E.Message); конец;

       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; конец;

Итак, просто для подведения итогов, есть ли в моем коде какие-то настройки, которые мне не хватает, которые будут показывать "имя клиента" под каждым столбцом с накоплением, или я должен использовать пользовательские метки? Если мне нужно использовать пользовательские метки, я был бы признателен за некоторые указания о том, как обеспечить замену правильного "имени клиента" из источника данных на правильное ValueIndex в DBChart1GetAxisLabel?

Заранее спасибо.

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>

Я проверил это в моем проекте, и он работает.

Другие вопросы по тегам