1

我经常使用索引号来引用 dbgrid 中字段中的值,例如:

dbgrid1.Fields[8].AsString:= 'SomeValue'; //索引 8 引用名为“付款”的字段

这可以正常工作,直到我更改了关于 dbgrid 在字段编辑器中列出的字段,此时我必须搜索所有上述用法并更改索引号。

如果我可以使用以下内容引用该领域,那将更简单,并且出现问题的机会更少:

dbgrid1.Field('Payment').AsString:= 'SomeValue';

有没有办法做到这一点?

4

1 回答 1

2

您可以使用这样的简单函数按字段名访问 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';
于 2021-01-21T19:36:21.853 回答