Dan*_*ela 1 database delphi tdbgrid
比方说,我有一组TField对象,想要动态地改变它们在某些DBGrid中的可见性.我还想允许用户更改此DBGrid中的列顺序,并具有一些固定列.
我知道在DBGrid上隐藏/显示列的正确方法,但是在VCL中存在一个很大的设计缺陷:拥有Column对象,可以移动到它的Field对象,但无法找回原因.
我想要的只是Field对象中的一种Column属性,所以我可以这样输入:
Field.Column.Visible := False;
Run Code Online (Sandbox Code Playgroud)
并使用指定的Columns属性隐藏DBGrid中的任何列.
我知道我可以用列创建HashSet或Collection并快速找到相应的列,但是有更直接的方法吗?
如果存储了列,可以使用以下内容:
function FindFieldColumn(Grid : TDBGrid; const FieldName: String): TColumn;
var
i: Integer;
begin
Result := nil;
for i := 0 to Grid.Columns.Count - 1 do
if AnsiCompareText(Grid.Columns[i].FieldName, FieldName) = 0 then
begin
Result := Grid.Columns[i];
Break;
end;
end;
procedure SetVisibleColumn(Grid : TDBGrid; AFieldName : string; AVisible : boolean);
var
Column : TColumn;
begin
Column := FindFieldColumn(Grid,AFieldName);
if Assigned(Column) then
Column.Visible := AVisible;
end;
Run Code Online (Sandbox Code Playgroud)
呼叫
SetVisibleColumn(MyGrid,MyField.Name, myField.Visible);
Run Code Online (Sandbox Code Playgroud)