Das TDBGrid kann die Spaltenkonfiguration aus einer Datei lesen und in eine Datei speichern.
Delphi-Quellcode:
DBGrid1.Columns.LoadFromFile();
DBGRid1.Columns.SaveToFile();
Es ginge auch mit einem Stream.
Mach' Dir einmal ein DBGrid nach den genauene Vorstellungen. Wenn Du mehrere bestimmte, aber feste Spaltenkombinationen benötigst, halt entsprechend viele. Die speicherst Du in Konfigurationsdateien und lädst sie dann jeweils situationsbedingt.
Für das DBGrid hab' ich mit mal (für Delphi 7) folgende Funktionen geschrieben:
Delphi-Quellcode:
type
TColumnsWrapper = class(TComponentWrapper)
private
FColumns : TDBGridColumns;
public
published
property Columns : TDBGridColumns read fColumns write fColumns;
end;
...
function LoadColumnsFromText : boolean;
function SaveColumnsToText(dbg: TDBGrid; sFilename : String): boolean;
...
function TfrmDGB.LoadColumnsFromText(dbg: TDBGrid; sFilename : String): boolean;
var
Wrapper : TColumnsWrapper;
st : TMemoryStream;
stFile : TMemoryStream;
begin
Result := false;
if not Assigned(dbg.DataSource) then exit;
if not Assigned(dbg.DataSource.DataSet) then exit;
if not Assigned(dbg.Columns) then exit;
if dbg.DataSource.DataSet.Active then begin
if dbg.DataSource.DataSet.Fields.Count = 0 then exit;
end;
if dbg.Columns.Count = 0 then exit;
Result := FileExists(sFilename);
if not Result then exit;
if dbg.Columns.Count > 0 then dbg.Columns.Clear;
Wrapper := TColumnsWrapper.Create(dbg);
try
Wrapper.Columns := TDBGridColumns.Create(nil, TColumn);
try
stFile := TMemoryStream.Create;
try
st := TMemoryStream.Create;
try
stFile.LoadFromFile(sFilename);
stFile.Position := 0;
ObjectTextToBinary(stFile,st);
st.Position := 0;
st.ReadComponent(Wrapper);
dbg.Columns.Assign(Wrapper.Columns);
finally
st.Free;
end;
finally
stFile.Free;
end;
finally
Wrapper.Columns.Free;
end;
finally
Wrapper.Free;
end;
Result := dbg.Columns.Count > 0;
end;
function TfrmDGB.SaveColumnsToText(dbg: TDBGrid; sFilename : String): boolean;
var
Wrapper : TColumnsWrapper;
st : TMemoryStream;
stFile : TMemoryStream;
s : String;
begin
Result := false;
if not Assigned(dbg.DataSource) then exit;
if not Assigned(dbg.DataSource.DataSet) then exit;
if not Assigned(dbg.Columns) then exit;
if dbg.DataSource.DataSet.Active then begin
if dbg.DataSource.DataSet.Fields.Count = 0 then exit;
end;
if dbg.Columns.Count = 0 then exit;
Wrapper := TColumnsWrapper.Create(nil);
Wrapper.Name := Format('DBGrid_%s',[dbg.Name]);
Wrapper.Filename := sFilename;
Wrapper.Application := Application.ExeName;
try
st := TMemoryStream.Create;
try
stFile := TMemoryStream.Create;
try
Wrapper.Columns := dbg.Columns;
st.WriteComponent(Wrapper);
st.Position := 0;
ObjectBinaryToText(st, stFile);
stFile.Position := 0;
s := ExtractFilePath(sFilename);
if s <> '' then ForceDirectories(s);
stFile.SaveToFile(sFilename);
finally
stFile.Free;
end;
finally
st.Free;
end;
finally
Wrapper.Free;
end;
Result := FileExists(sFileName);
end;
Damit bekommst Du dann Textdateien, die Du auch in einem Editor nach Deinen Wünschen gestalten kannst. Es handelt sich um delphitypische
DFM-Dateien.
Ein Beispiel:
Delphi-Quellcode:
object DBGrid_dbg: TColumnsWrapper
Filename = 'C:\Delphi\Config\Konfigurationsname.dfm'
Application = 'C:\Delphi\Programmname.exe'
Columns = <
item
// Hier stehen alle Attribute von TDBGrid.Columns.Items[x] zur Verfügung
// Der Title ist auch darunter.
Expanded = False
FieldName = 'DatabaseFile'
Width = 443
Visible = True
end
item
Expanded = False
FieldName = 'UserID'
Width = 64
Visible = True
end
item
Expanded = False
FieldName = 'Password'
Width = 64
Visible = True
end
item
Expanded = False
FieldName = 'CharSet'
Width = 65
Visible = True
end>
end
Eventuell könnte das ja ein Ansatz für dich sein.