在Delphi中重新定位DBGrid中的列

Tof*_*nov 1 database delphi dbgrid

我需要动态更改DBGRid中某列的位置.假设我需要将第21列放在第10位.我使用:

DBGrid.Columns[21].Index:=10;
Run Code Online (Sandbox Code Playgroud)

但是,这也改变了数组本身,这意味着,下次我想访问这个列时,我需要编写DBGrid.Columns [10],这使得它有点不干净,我需要记住所有列的位置等有没有更简单的方法来重新定位列?如果在这个位置变化期间数组索引没有改变也是好的.

Sve*_*sli 6

处理问题的一种简单方法是不通过索引而是通过fieldname访问列.介绍这样的方法:

function GetColumn(aGrid : TDBGrid; aFieldName : string) : TColumn;
var
  I : integer;
begin
  for I := 0 to DBGrid.Columns.Count-1 do
    if aDBGrid.Columns[I].FieldName = aFieldName then
    begin
      Result := aDBGrid.Columns[I];
      exit;
    end;
  Result := nil;
end;
Run Code Online (Sandbox Code Playgroud)

缺点是每次需要访问网格时都必须运行循环,导致延迟很小,因此如果速度至关重要,您可以考虑其他选项.