首页 > 解决方案 > 在 Delphi 中创建表生成器

问题描述

我正在尝试在 delphi 10 中创建一个表生成器,就像图片中的那个一样。我找不到任何选项来编辑/添加“列名、列类型和列大小”按钮。

样机屏幕截图

procedure TForm1.AddColumnClick(Sender: TObject); 
var 
  Col : TColumn; 
begin
  Col := DBGrid2.Columns.Add; 
  Col.Title.Caption := 'MyNewColumn'; 
end; 

如果这是添加一列,如何获取列类型及其大小的代码?

标签: delphi

解决方案


您的编辑询问

如何获取列类型及其大小的代码?

完全改变你的 q 是关于什么的。它仍然过于宽泛,而且您似乎打算重新发明轮子,因为 Delphi 的 TDBGrid 具有执行您似乎想要内置的功能的必要设施。以下是我对进一步学习的建议:

  • 了解如何在数据集上创建持久的 TField,这些 TField 将为网格提供数据。请参阅http://docwiki.embarcadero.com/RADStudio/Rio/en/Persistent_Field_Components 这样做的要点是,一旦数据集具有持久 TField,支持创建 TDBGrid 列的设计时工具就可用。

  • 一旦您的数据集具有持久的 TFields,在 IDE 中清除 TDBGrid 已有的所有列,然后

  • 双击 DBgrid。您将获得一个带有类似标题的弹出式列编辑器 Editing DBGrid1.Columns。右键单击列编辑器并Add All Fields从上下文菜单中选择。这将使用 Delphi 用于网格列的默认数据类型和大小创建列,这似乎是您自己尝试做的。

要回答您的具体问题,您可以使用获取数据集字段的大小和数据类型

AField := DBGrid1.Columns[i].Field;
Size := AField.Size;
DataType := AField.DataType;

如何从相关 TField 的大小中设置合适的列宽留给读者作为练习。

您需要研究 TDBGrid 的源代码,以了解网格列如何使其行为适应数据集的特定 TField 类型。

为此,请在表单中添加一个按钮和以下代码

type
 TMyDBGrid = class(TDBGrid);

procedure TForm1.btnCreateColumnsClick(Sender: TObject);
begin
  DBGrid1.Columns.Clear;
  TMyDBGrid(DBGrid1).CreateColumns;
end;

TMyGrid 类型声明是为了访问受保护CreateColumns的网格方法。然后,您可以在 TMyDBGrid(DBGrid1).CreateColumns 调用上放置一个调试器断点并跟踪它以查看它的作用。

祝你好运!


推荐阅读