如何使用 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;
如何通过单击表单上 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;