gpt4 book ai didi

delphi - 如何通过名称而不是索引访问 TDBGrid 列?

转载 作者:行者123 更新时间:2023-12-03 14:46:35 24 4
gpt4 key购买 nike

如何通过名称而不是索引访问 TDBGrid 列?

例如,现在我使用:

 grdInvoiceItems.Columns[2].Visible := False;

但最好写成这样:

 grdInvoiceItems.Columns['UnitPrice'].Visible := False;

同时我使用 for 循环,如下所示:

  for idx := 0 to grdInvoiceItems.Columns.Count - 1 do
begin
if (
(grdInvoiceItems.Columns[idx].FieldName = 'UnitPrice') or
(grdInvoiceItems.Columns[idx].FieldName = 'Discount') or
(grdInvoiceItems.Columns[idx].FieldName = 'SecretCode')
) then
grdInvoiceItems.Columns[idx].Visible := False;
end;

在我看来,使用列名称比列索引好得多,因为索引比名称更容易更改。

关于如何更好地封装它有什么想法吗?

最佳答案

你可以尝试这样的事情:

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;

当然,如果您使用的 Delphi 版本足够新以支持 Class Helper s,您可以将此函数包装到 Class Helper 中对于 TDBGrid ,像这样

type
TGridHelper = class helper for TDBGrid
function ColumnByName(const AName : String) : TColumn;
end;
[...]

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;

那么,你可以这样做

Col := DBGrid1.ColumnByName('SomeName');

显然,您可以编写一个类似的函数,通过列的标题而不是关联字段的 FieldName 进行搜索。

关于delphi - 如何通过名称而不是索引访问 TDBGrid 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37852814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com