我经常使用索引号引用dbgrid中字段中的值,例如:
dbgrid1.Fields8.AsString:= 'SomeValue';//索引8引用名为'Payment‘的字段
这可以正常工作,直到我更改了字段编辑器中列出的dbgrid的字段,此时我必须搜索所有上述用法并更改索引号。
如果我可以用下面这样的东西来引用这个领域,它将会简单得多,出现问题的机会也更少:
dbgrid1.Field('Payment').AsString:= 'SomeValue';
有没有办法做到这一点?
发布于 2021-01-22 03:36:22
您可以使用如下所示的简单函数通过字段名访问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';https://stackoverflow.com/questions/65833997
复制相似问题