Как я могу изменить выравнивание заголовка моего представления таблицы cxGrid? - PullRequest
0 голосов
/ 20 февраля 2020

Как я могу изменить выравнивание заголовка моего cxGrid tableView? Я пытаюсь

MyGridColumn.HeaderAlignmentVert := TcxAlignmentVert.vaCenter;

, но это не работает: (

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

В приведенном ниже коде показано, как создать cxGrid, добавить TcxGridDBTableView и установить выравнивание заголовков для заголовков TableView, все целиком в коде. Я сделал все это в коде, потому что в Инспекторе объектов есть так много свойств для cxGrid и его содержимого, что трудно сразу увидеть (в OI или DFM), каковы соответствующие свойства.

type
  TForm1 = class(TForm)
    CDS1: TClientDataSet;
    DS1: TDataSource;
    cxGrid1DBTableView1: TcxGridDBTableView;
    cxGrid1Level1: TcxGridLevel;
    cxGrid1: TcxGrid;
    procedure FormCreate(Sender: TObject);
  [...]
  public
    cxGrid : TcxGrid;
    cxLevel : TcxGridLevel;
    cxView : TcxGridDBTableView;
  end;
[...]
procedure TForm1.FormCreate(Sender: TObject);
var
  Field : TField;
begin
  // First, set up TClientDataSet

  Field := TIntegerField.Create(Self);
  Field.FieldKind := fkData;
  Field.FieldName := 'ID';
  Field.DataSet := CDS1;

  Field := TStringField.Create(Self);
  Field.FieldKind := fkData;
  Field.FieldName := 'Name';
  Field.Size := 40;
  Field.DataSet := CDS1;

  Field := TIntegerField.Create(Self);
  Field.FieldKind := fkData;
  Field.FieldName := 'Value';
  Field.DataSet := CDS1;

  CDS1.CreateDataSet;

  CDS1.IndexFieldNames := 'ID';

  CDS1.InsertRecord([1, 'One', 1]);
  CDS1.InsertRecord([1, 'Two', 2]);
  CDS1.InsertRecord([1, 'Three', 3]);

  CDS1.First;

  //  Next, create cxGrid, and add cxGridDBTableView
  cxGrid := TcxGrid.Create(Self);
  cxGrid.Parent := Self;
  cxGrid.Width := 400;

  cxLevel := cxGrid.Levels.Add;
  cxLevel.Name := 'Firstlevel';

  cxView := cxGrid.CreateView(TcxGridDBTableView) as TcxGridDBTableView;
  cxView.Name := 'ATableView';
  cxView.OptionsView.HeaderHeight := 100; // so we can easily see different vert alignments

  cxView.DataController.Options := cxView.DataController.Options + [dcoImmediatePost];
  cxView.DataController.KeyFieldNames := 'ID';

  cxLevel.GridView := cxView;

  cxView.DataController.DataSource := DS1;
  cxView.DataController.CreateAllItems;

  //  by this point the columns and their headers will have been created

  cxView.Columns[0].HeaderAlignmentVert := cxclasses.vaTop;
  cxView.Columns[1].HeaderAlignmentVert := cxclasses.vaCenter;
  cxView.Columns[2].HeaderAlignmentVert := cxclasses.vaBottom;
end;

Для меня заголовки имеют правильные выравнивания, ie

ID
    Name
           Value

Fwiw, прежде чем создавать приведенный выше пример, я попытался установить вертикальное выравнивание заголовков в существующем проекте и не мог «т заставить его работать либо, с помощью которого я имею в виду, тексты заголовков все упорно оставался в вертикальном центре. Поэтому я предполагаю, что в сетке моего существующего проекта должна быть какая-то другая настройка, которая переопределяет поведение выравнивания.

Обновление Я заметил, что если я закомментирую строку, которая устанавливает HeaderHeight, вертикальное выравнивание настройка появляется , чтобы не иметь никакого эффекта. Я думаю, что причина в том, что разница в вертикальном положении текста, вызванная различными выравниваниями, слишком мала, чтобы заметить - только после того, как я увеличу HeaderHeight до 23 или более, будет видимая разница.

1 голос
/ 20 февраля 2020

Хорошо, я обнаружил проблему. Это потому, что я установил

OptionsView.HeaderEndEllipsis = True

Когда вы делаете это,

MyGridColumn.HeaderAlignmentVert := TcxAlignmentVert.vaCenter;

не работает: (

...