delphi – 如何通过名称而不是按索引访问TDBGrid列?
发布时间:2020-12-15 04:35:02 所属栏目:大数据 来源:网络整理
导读:如何按名称而不是索引访问TDBGrid列? 例如,现在我使用: grdInvoiceItems.Columns[2].Visible := False; 但是写下这样的东西要好得多: grdInvoiceItems.Columns['UnitPrice'].Visible := False; 与此同时,我使用for循环: for idx := 0 to grdInvoiceItems
如何按名称而不是索引访问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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |