首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中使用DBGrid时,您如何正确地证明FDMemtable的标题是正确的?

在Delphi中使用DBGrid时,您如何正确地证明FDMemtable的标题是正确的?
EN

Stack Overflow用户
提问于 2016-03-25 00:11:05
回答 2查看 3.1K关注 0票数 2

我似乎无法在DBGrid中获得固定的行标题,以便在使用FDMemtable时正确对齐。每当我将字段对齐设置为taRightJustify时,它就正确地证明数据单元格是正确的。然而,DBGrid标题总是正确的。

更令人沮丧的是,我可以将相应的DBGrid列标题对齐为taRightJustify,这在IDE中是非常好的。但是当我运行程序时,列标题显示为左对齐。

是否有人找到了一种方法,使DBGrid列标题在使用FDMemtable时保持正确?

顺便说一句,taCenter也会发生这种情况。数据单元格以中心对齐,但标题保持左对齐。

PEBKAC

这个问题是我自己造成的。我没有调用DBGrid列编辑器并添加所有字段。相反,我使用了"Structure“窗格,并以这种方式访问了DBGrid列。尽管“结构”窗格允许我修改列标题,但这只是暂时的,在程序运行时不持久化。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-25 13:34:07

我也不能用TFDMemTable来重现这个问题。

我在一个新的VCL应用程序的主表单上删除了一个TFDMemTableTDataSourceTDBGrid,像往常一样将它们连接起来(网格的数据源设置为DataSource1,数据源的DataSet设置为FDMemTable1),然后将以下代码添加到表单的OnCreate事件中:

代码语言:javascript
复制
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;

如果我在设计时设置了所有的东西,它也能正常工作。重复上面使用的相同的设置步骤,但不要使用代码,而是使用以下步骤:

  1. 在对象检查器中选择FDMemTable1。在OI的底部,单击LoadFromFile链接,导航到BDS示例数据文件夹(默认情况下,在C:\Users\Public\LoadFromFile中并选择animals.fds。(没有选择该字段的具体原因,但它有一个可以用于测试的数字字段。)
  2. 右键单击DBGrid,选择“列编辑器”,或单击“对象检查器”中DBGrid.Columns属性上的省略号按钮。右键单击“列编辑器”并选择“添加所有字段”。
  3. 选择“大小”或“权重”列,展开其标题属性,并将对齐设置为taRightJustify
  4. 运行应用程序。您在第3步中修改的列有一个右对齐的标题。(这里我使用了Size列。)

票数 3
EN

Stack Overflow用户

发布于 2016-03-25 08:07:13

下面的代码适用于我在西雅图。我使用的是TClientDataSet而不是TFDMemTable,但我看不出这会有什么不同。

如果在DBGrid上定义了持久性列,还可以通过对象检查器设置列的标题对齐方式--使用它来选择列,然后展开其标题节点,并在那里设置标题对齐。

代码语言:javascript
复制
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中流进来之后调用的,它是运行时系统完成表单设置的例程。诚然,有时另一个组件(通常是第三方组件)行为不当并导致其他组件属性的奇怪行为,这是非常罕见的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36212122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档