我似乎无法在DBGrid中获得固定的行标题,以便在使用FDMemtable时正确对齐。每当我将字段对齐设置为taRightJustify时,它就正确地证明数据单元格是正确的。然而,DBGrid标题总是正确的。
更令人沮丧的是,我可以将相应的DBGrid列标题对齐为taRightJustify,这在IDE中是非常好的。但是当我运行程序时,列标题显示为左对齐。
是否有人找到了一种方法,使DBGrid列标题在使用FDMemtable时保持正确?
顺便说一句,taCenter也会发生这种情况。数据单元格以中心对齐,但标题保持左对齐。
PEBKAC
这个问题是我自己造成的。我没有调用DBGrid列编辑器并添加所有字段。相反,我使用了"Structure“窗格,并以这种方式访问了DBGrid列。尽管“结构”窗格允许我修改列标题,但这只是暂时的,在程序运行时不持久化。
发布于 2016-03-25 13:34:07
我也不能用TFDMemTable来重现这个问题。
我在一个新的VCL应用程序的主表单上删除了一个TFDMemTable、TDataSource和TDBGrid,像往常一样将它们连接起来(网格的数据源设置为DataSource1,数据源的DataSet设置为FDMemTable1),然后将以下代码添加到表单的OnCreate事件中:
procedure TForm3.FormCreate(Sender: TObject);
begin
FDMemTable1.FieldDefs.Add('ID', ftInteger, 0, True);
FDMemTable1.FieldDefs.Add('LastName', ftString, 20);
FDMemTable1.FieldDefs.Add('FirstName', ftString, 20);
FDMemTable1.FieldDefs.Add('Salary', ftCurrency);
FDMemTable1.CreateDataSet;
FDMemTable1.Active := True;
FDMemTable1.AppendRecord([1, 'Smith', 'John', 30000]);
FDMemTable1.AppendRecord([2, 'Jones', 'Jane', 40000]);
FDMemTable1.AppendRecord([3, 'Doe', 'David', 2500]);
DBGrid1.Columns[3].Alignment := TAlignment.taRightJustify;
DBGrid1.Columns[3].Title.Alignment := TAlignment.taRightJustify;
end;如果我在设计时设置了所有的东西,它也能正常工作。重复上面使用的相同的设置步骤,但不要使用代码,而是使用以下步骤:
taRightJustify。

发布于 2016-03-25 08:07:13
下面的代码适用于我在西雅图。我使用的是TClientDataSet而不是TFDMemTable,但我看不出这会有什么不同。
如果在DBGrid上定义了持久性列,还可以通过对象检查器设置列的标题对齐方式--使用它来选择列,然后展开其标题节点,并在那里设置标题对齐。
procedure TForm1.CDS1AfterOpen(DataSet: TDataSet);
var
i : Integer;
begin
for i := 0 to DBGrid1.Columns.Count - 1 do
DBGrid1.Columns[i].Title.Alignment := taRightJustify;
end;顺便说一句,如果您认为您正在设置OI中的对齐,但是它被忽略了,那么看看是否可以找到原因,如下所示:
View as text。然后,在IDE编辑器窗口中,可以看到是否按照OI中指定的方式保存对齐属性。使用“编辑器”上下文菜单可返回到将窗体视为窗体。inherited的正文中有一个断点,您可以在调用inherited之前和之后检查对齐值。为什么我建议调查Loaded?它是在表单从DFM中流进来之后调用的,它是运行时系统完成表单设置的例程。诚然,有时另一个组件(通常是第三方组件)行为不当并导致其他组件属性的奇怪行为,这是非常罕见的。
https://stackoverflow.com/questions/36212122
复制相似问题