如何更改 cxGrid table 视图的 header 对齐方式?
how can I change the header alignment of my cxGrid table view?
如何更改我的 cxGrid tableView 的 header 对齐方式?我试试
MyGridColumn.HeaderAlignmentVert := TcxAlignmentVert.vaCenter;
但这行不通:(
下面的代码展示了如何创建一个cxGrid,添加一个TcxGridDBTableView,并设置
header TableView 的 header 对齐,全部在代码中。我已经在代码中完成了这一切,因为在 Object 检查器中有如此多的属性用于 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;
对我来说,header的对齐方式是正确的,即
ID
Name
Value
Fwiw,在创建上述示例之前,我尝试在现有项目上设置 headers 的垂直对齐方式,但也无法使其工作,因此我
也就是说,headers 的文本都顽固地保持在垂直居中。所以我想我现有项目的网格中一定有一些其他设置覆盖了
对齐行为。
Update 我注意到如果我注释掉设置 HeaderHeight 的行,垂直对齐设置 似乎 无效。我认为原因很简单,就是对齐方式不同导致的文本垂直位置的差异太小,无法察觉——只有当我将 HeaderHeight 增加到 23 或更多后,才会有明显的差异。
好的,我找到问题了
这是因为我设置了
OptionsView.HeaderEndEllipsis = True
当你这样做时
MyGridColumn.HeaderAlignmentVert := TcxAlignmentVert.vaCenter;
不工作:(
如何更改我的 cxGrid tableView 的 header 对齐方式?我试试
MyGridColumn.HeaderAlignmentVert := TcxAlignmentVert.vaCenter;
但这行不通:(
下面的代码展示了如何创建一个cxGrid,添加一个TcxGridDBTableView,并设置 header TableView 的 header 对齐,全部在代码中。我已经在代码中完成了这一切,因为在 Object 检查器中有如此多的属性用于 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;
对我来说,header的对齐方式是正确的,即
ID
Name
Value
Fwiw,在创建上述示例之前,我尝试在现有项目上设置 headers 的垂直对齐方式,但也无法使其工作,因此我 也就是说,headers 的文本都顽固地保持在垂直居中。所以我想我现有项目的网格中一定有一些其他设置覆盖了 对齐行为。
Update 我注意到如果我注释掉设置 HeaderHeight 的行,垂直对齐设置 似乎 无效。我认为原因很简单,就是对齐方式不同导致的文本垂直位置的差异太小,无法察觉——只有当我将 HeaderHeight 增加到 23 或更多后,才会有明显的差异。
好的,我找到问题了 这是因为我设置了
OptionsView.HeaderEndEllipsis = True
当你这样做时
MyGridColumn.HeaderAlignmentVert := TcxAlignmentVert.vaCenter;
不工作:(