Save code:
FGrid: TUniDBGrid;
FSection: string;
FLayout: TStringList;
procedure TUniGridLayOut.GetLayout;
var
i: integer;
s: string;
begin
s := 'Column%d=%s,%d,%d,%d';
with FGrid, FLayout do
begin
Clear;
for i := 0 to Columns.Count - 1 do
with Columns[i] do
Add(Format(s, [i + 1, FieldName, Width, Ord(Visible), Ord(Expanded)]));
end;
end;
Restore code:
type
TColumnParam = record
ColumnName: string;
ColumnWidth: integer;
ColumnVisible: boolean;
ColumnExpanded: boolean;
end;
procedure TUniGridLayOut.ApplyLayout;
var
Column: TUniDBGridColumn;
i: integer;
ColumnParam: TColumnParam;
procedure ParamFromStr(var ColumnParam: TColumnParam; const s: string);
var
Arr: TArray<string>;
begin
Arr := s.Split([',']);
if Length(Arr) = 4 then
begin
ColumnParam.ColumnName := Arr[0];
TryStrToInt(Arr[1], ColumnParam.ColumnWidth);
ColumnParam.ColumnVisible := Arr[2] = '1';
ColumnParam.ColumnExpanded := Arr[3] = '1';
end;
end;
begin
with FGrid, FLayout do
begin
BeginUpdate;
try
for i := 0 to FLayout.Count - 1 do
begin
ParamFromStr(ColumnParam, FLayout[i]);
TMyUniCustomDBGridColumns(Columns).FindFieldId(ColumnParam.ColumnName, TUniBaseDBGridColumn(Column));
if Assigned(Column) then
begin
if i < Columns.Count then
Column.Index := i;
Column.Width := ColumnParam.ColumnWidth;
Column.Visible := ColumnParam.ColumnVisible;
Column.Expanded := ColumnParam.ColumnExpanded;
end;
end;
finally
EndUpdate;
end;
end;
end;