繁体   English   中英

在 Delphi 中创建表生成器

[英]Create table generator in Delphi

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

样机屏幕截图

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

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

您的编辑要求

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

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

  • 了解如何在将为网格提供数据的数据集上创建持久性TField。 请参阅http://docwiki.embarcadero.com/RADStudio/Rio/en/Persistent_Field_Components这样做的目的是,一旦数据集具有持久性 TFields,支持创建 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 调用上放置一个调试器断点并跟踪它以查看它的作用。

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM