我经常使用索引号来引用 dbgrid 中字段中的值,例如:
dbgrid1.Fields[8].AsString:= 'SomeValue'; //索引 8 引用名为“付款”的字段
这可以正常工作,直到我更改了关于 dbgrid 在字段编辑器中列出的字段,此时我必须搜索所有上述用法并更改索引号。
如果我可以使用以下内容引用该领域,那将更简单,并且出现问题的机会更少:
dbgrid1.Field('Payment').AsString:= 'SomeValue';
有没有办法做到这一点?
您可以使用这样的简单函数按字段名访问 TDBGrid 列:
function ColumnByName(Grid : TDBGrid; const AName: String): TColumn;
var
i : Integer;
begin
Result := Nil;
for i := 0 to Grid.Columns.Count - 1 do begin
if (Grid.Columns[i].Field <> Nil) and (CompareText(Grid.Columns[i].FieldName, AName) = 0) then begin
Result := Grid.Columns[i];
exit;
end;
end;
end;
然后,您可以这样做:
ColumnByName(dbgrid1, 'Payment').AsString:= 'SomeValue';
如果您使用的是 FireDAC,您的 Delphi 版本足够新,可以支持类助手,因此您可以使用类助手:
type
TGridHelper = class helper for TDBGrid
function ColumnByName(const AName : String) : TColumn;
end;
[...]
{ TGridHelper }
function TGridHelper.ColumnByName(const AName: String): TColumn;
var
i : Integer;
begin
Result := Nil;
for i := 0 to Columns.Count - 1 do begin
if (Columns[i].Field <> Nil) and (CompareText(Columns[i].FieldName, AName) = 0) then begin
Result := Columns[i];
exit;
end;
end;
end;
接着
dbgrid1.ColumnByName('Payment').AsString := 'SomeValue';