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 版本的兼容性。