AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Spalten während Laufzeit ausblenden/verschieben
Thema durchsuchen
Ansicht
Themen-Optionen

Spalten während Laufzeit ausblenden/verschieben

Ein Thema von thomas.h · begonnen am 9. Apr 2025 · letzter Beitrag vom 15. Apr 2025
 
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#6

AW: Spalten während Laufzeit ausblenden/verschieben

  Alt 10. Apr 2025, 08:41
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.
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz