如何使用 OnCellClick 事件获取 Delphi 中 DBGrid 单元格的内容

How to get the content of a cell on a DBGrid in Delphi by using the OnCellClick event

如何通过单击表单上 dbgrid 中的单元格来获取所选单元格的内容?

请注意,Delphi 的 DBGrid 是一个数据感知网格,与其他网格(例如 Delphi 的 TStringGrid)相比略有不同,因为 使用 Row 和 Column 值不容易访问网格。

最简单的方法就是

procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
  S : String;
begin
  S := DBGrid1.SelectedField.AsString;
  Caption := S;
end;

之所以有效,是因为 TDBGrid 的编码方式,关联的数据集是 同步到当前 selected/clicked 网格行。一般来说, 从数据集的当前记录中获取值是最简单的,但是您问过, 所以。尽量避免通过操作单元格的值来更改当前记录的值 文本,因为 DBGrid 会在每一寸的道路上与你战斗。

顺便说一句,我见过更多 "round the houses" 获取单元格文本的方法,但是 根据 KISS 原则,我更喜欢这个。

请注意,获取单元格文本的更可靠方法包括 Remy Lebeau 建议使用 Column.Field 而不是 SelectedField, 如下:

procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
  S : String;
  AField : TField;
begin
  AField := DBGrid1.SelectedField;
  //  OR AField := Column.Field;


  //  Note:  If the DBGrid happens to have an unbound column (one with
  //         no TField assigned to it) the AField obtained mat be Nil if
  //         it is the unbound column which is clicked.  So we should check for
  //         AField being Nil

  if AField <> Nil then begin
    S := AField.AsString;
    Caption := S;
  end;
end;