Delphi   发布时间:2022-04-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了delphi – 如何通过名称而不是按索引访问TDBGrid列?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如何按名称而不是索引访问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;

使用colum name是IMO更好的tham列索引,因为索引比名称更容易变化.

关于如何更好地封装它的任何想法?

解决方法

你可以尝试这样的事情:
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 Helpers,您可以将此函数包装到TDBGrid的Class Helper中,就像这样

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');

显然,你可以编写一个类似的函数来搜索列的标题,而不是相关的Field的FieldName.

大佬总结

以上是大佬教程为你收集整理的delphi – 如何通过名称而不是按索引访问TDBGrid列?全部内容,希望文章能够帮你解决delphi – 如何通过名称而不是按索引访问TDBGrid列?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。