首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi dbGrid -列名

Delphi dbGrid -列名
EN

Stack Overflow用户
提问于 2021-01-22 02:54:14
回答 1查看 997关注 0票数 1

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

dbgrid1.Fields8.AsString:= 'SomeValue';//索引8引用名为'Payment‘的字段

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

如果我可以用下面这样的东西来引用这个领域,它将会简单得多,出现问题的机会也更少:

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

有没有办法做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2021-01-22 03:36:22

您可以使用如下所示的简单函数通过字段名访问TDBGrid列:

代码语言:javascript
复制
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;

然后,您可以这样做:

代码语言:javascript
复制
ColumnByName(dbgrid1, 'Payment').AsString:= 'SomeValue';

如果您使用的是FireDAC,那么您的Delphi版本已经足够支持类帮助器了,所以您可以使用类帮助器来代替:

代码语言:javascript
复制
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;

然后

代码语言:javascript
复制
dbgrid1.ColumnByName('Payment').AsString := 'SomeValue';
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65833997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档