DBGrid 是什么?它在 Delphi/C++Builder 数据库程序里起什么作用

DBGrid 是 Delphi 和 C++Builder 里的数据库感知表格控件:把它和一个数据源(TDataSource)连起来,它就会自动把数据集的字段画成表格的行和列,用户可以直接在格子里浏览、录入和修改数据。它适合做数据维护界面、查询结果列表这类"表格式"的交互场景;如果你只需要只读展示,或者界面完全自定义,用普通 StringGrid 或 ListView 反而更省事。

DBGrid 在数据链路中的位置

DBGrid 本身不直接连数据库,它处在一条固定的链路上:

数据库 → TDataSet 后代(TTable / TQuery / TADOQuery / TFDQuery …)
        → TDataSource
        → TDBGrid
  • TDataSet 后代负责真正的取数、提交、事务,它持有字段(TField)集合。
  • TDataSource 是中间桥,把数据集"暴露"给数据感知控件,并广播当前记录变化。
  • TDBGrid 订阅这个数据源,按字段自动生成列,跟随光标滚动、编辑、插入、删除。

所以配置顺序通常是:先设好数据集的连接和 SQL/表名,再设 DataSource.DataSet,最后把 DBGrid.DataSource 指向这个 TDataSource。任何一环没接上,网格就是空的。

标准 TDBGrid 能做什么

  • 自动按数据集字段生成列,字段改名、增删后网格跟着变。
  • 单元格内直接编辑,编辑结果写回数据集,由数据集决定何时提交到数据库。
  • 支持当前行高亮、行选择、列宽拖动、列排序(取决于数据集和设置)。
  • 通过列对象(TColumn)控制某一列的标题、宽度、对齐、只读、下拉编辑器等。

和第三方增强网格的差别

标准 TDBGrid 功能够用但偏基础。第三方组件(例如 X-Files Components 提供的 X-DBGrid)通常是在这个基础上做增强,常见方向包括更丰富的单元格外观、汇总行、筛选、导出、更强的编辑器和打印支持。X-Files Components 的页面把 X-DBGrid 定位为"面向数据库应用的专用组件",并说明其组件包会随 RAD Studio 版本重新编译(页面记录到 8.7 版本对应 RAD Studio 13.2,并注明可用于免费的 Delphi Community Edition)。

选择时的判断条件很简单:

需求 建议
标准增删改查、界面朴素 直接用 TDBGrid,零额外依赖
需要汇总、复杂外观、导出、打印 评估第三方增强网格
项目已锁定组件供应商 优先选与现有版本匹配的包

第三方包要额外考虑:是否支持你当前的 RAD Studio 版本、授权方式、升级维护节奏。这些信息以组件厂商页面为准,不要凭印象推断。

常见卡点与排查方向

网格一片空白

  • 数据集是否已打开(Active = True 或执行了 Open)?
  • DBGrid.DataSource 是否指向了已设置 DataSet 的 TDataSource?
  • 查询是否真的返回了行?

能显示但不能编辑

  • 数据集本身是否只读(如某些查询、只读游标)?
  • 列的 ReadOnly 是否被设成 True?
  • 字段是否为计算字段或查找字段?

改了数据没保存

  • 编辑只是写进了数据集缓冲区,需要显式提交(如 Post,或数据集/事务的提交动作)。
  • 检查是否处于事务中且未提交。

列顺序或标题不对

  • 运行时列由字段顺序决定;要固定顺序和标题,需在设计期建立持久列(Columns)。

版本不匹配

  • 第三方包必须和你的 RAD Studio 版本对应,否则可能装不上或运行异常。安装前先确认包所声明的目标版本。

一句话结论

DBGrid 是 Delphi/C++Builder 里把数据集变成可编辑表格的标准控件,核心是"数据集 → 数据源 → 网格"三段式连接;标准 TDBGrid 满足常规数据维护,需要更强展示和导出能力时再评估 X-DBGrid 这类第三方增强组件,并确认其与你所用 RAD Studio 版本的兼容性。

x-files.pl
X-Files Components - Professional VCL components for Embarcadero RAD Studio 13 Florence (Delphi & C++Builder).