![]() |
Spalten eines DBGrid in INI-Datei speichern
Halo,
Habe einen Tipp mit dem DBGrid1.Columns.SaveToFile('c:\sortierung.txt') gefunden, ist toll, und funktioniert Ich möchte allerdings den Stream in eine INI-Section ablegen, hier verzweifel ich. Habe auch keine Ahnung, wie ich einen TStringStream direkt in eine INI-Section bekomme. Hat jemand einen Tipp ?? mfg waldforest
Delphi-Quellcode:
[edit=Christian Seehase]Delphi-Tags korrigiert. Mfg, Christian Seehase[/edit]procedure TQueryForm.GridToIni(GridName: TDBGrid; Section: string); var MS: TMemoryStream; Ini : TIniFile; tTv: TStringStream; node : string; n: integer; begin tTv := TStringStream.Create(''); MS := TMemoryStream.Create; Ini:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')); try GridName.Columns.SaveToStream(MS); MS.Position := 0; tTv.Read(MS,ms.Size) ; INI.EraseSection(Section); INI.WriteString(Section, '', tTv.DataString); // Hier läuft die Anwendung auf Fehler finally tTv.Free; MS.Free; end; end; |
Re: Spalten eines DBGrid in INI-Datei speichern
Zitat:
Delphi-Quellcode:
Grüße vom marabu
uses
TypInfo, IniFiles; procedure SaveToIniFile(gc: TDBGridColumns; ini: TMemIniFile); var i, j, iProps: integer; c: TColumn; ppl: PPropList; ppi: PPropInfo; colName: string; begin for i := 1 to gc.Count do begin c := gc.Items[Pred(i)]; colName := c.FieldName; ini.EraseSection(colName); iProps := GetPropList(c, ppl); for j := 0 to Pred(iProps) do begin ppi := ppl[j]; case ppi.PropType^.Kind of tkString, tkLString: ini.WriteString(colName, ppi.Name, GetStrProp(c, ppi)); tkInteger: ini.WriteString(colName, ppi.Name, IntToStr(GetInt64Prop(c, ppi))); tkEnumeration: ini.WriteString(colName, ppi.Name, GetEnumProp(c, ppi)); end; end; end; end; |
Re: Spalten eines DBGrid in INI-Datei speichern
Danke für die Empfehlung. :-D
Habe es ausprobiert, und das Ergebnis war toll; Mein persönlicher Anspruch (lediglich die Reihenfolge lässt sich verändern) wurde sogar übertroffen. Ich habe aber dadurch viele neues gelernt und auch mein Problem lösen können. :angel: Hier nun die Gesamtlösung, welche auch funktioniert. Manchmal reicht ein kleiner Tipp um Quantensprünge zu machen, Danke !!! Forest
Delphi-Quellcode:
[edit=alcaeus]Delphi-Tags korrigiert. Mfg, alcaeus[/edit]
Procedure TQueryForm.GridIniWritePos(GridName: TDBGrid; Section: String) ;
var Ini : TIniFile; i : Integer; reihenfolge : String; begin reihenfolge := ''; for i := 0 to GridName.FieldCount-1 do reihenfolge := reihenfolge+GridName.Columns.Items[i].FieldName+';'; :thumb: Ini:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')); try Ini.WriteString(Section, 'Reihenfolge:', reihenfolge); finally Ini.Free; end; end; Procedure TQueryForm.GridIniReadPos(GridName: TDBGrid; Section: String) ; var Ini : TIniFile; reihenfolge : String; i, posi : integer; begin reihenfolge := ''; try Ini:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')); reihenfolge := Ini.ReadString(Section, 'Reihenfolge:', ''); posi := Pos(';', reihenfolge); i := 0; while posi > 0 do begin GridName.Columns.Items[i].FieldName := Copy(reihenfolge, 1, posi-1); Delete(reihenfolge, 1, posi); posi := Pos(';', reihenfolge); Inc(i); end; finally Ini.Free; end; end; |
Re: Spalten eines DBGrid in INI-Datei speichern
Hi,waldforest
Ich habe gerade das selbe Thema. Habe deine Source getestet und das Speichern geht, aber ich kann es zwar auslesen,aber er ändert die Reihenfolge beim Grid nciht. welche Ereignisse hast du verwendet?? Danke. |
Re: Spalten eines DBGrid in INI-Datei speichern
Hi René,
wenn es dir nur um die Reihenfolge der Spalten in einem DBGrid geht, dann reicht vielleicht schon das hier:
Delphi-Quellcode:
Müsstest du aber noch testen.
procedure LoadColumnOrder(gc: TDBGridColumns; sl: TStrings);
var i: integer; begin for i := 0 to gc.Count - 1 do with gc.Items[i] do Index := sl.IndexOf(FieldName); end; procedure SaveColumnOrder(gc: TDBGridColumns; sl: TStrings); var i: integer; begin sl.Clear; for i := 0 to gc.Count - 1 do sl.Add(gc.Items[i].FieldName); end; // Verwendung: // SaveColumnOrder(DBGrid.Columns, sl); // LoadColumnOrder(DBGrid.Columns, sl); Grüße vom marabu |
Re: Spalten eines DBGrid in INI-Datei speichern
Hi,
jo mir gehts nur um das Column Reihenfolge, Ich bekomme da nur eine Zugriffsverletzung. Ich habe das Ereignis ONColumnMoved genommen! Wenn ich das PRog schließe und wida Starte hat er ja wida die Normalen Columns dann muß ich die Strings speichern. Danke. |
Re: Spalten eines DBGrid in INI-Datei speichern
DIe Ereignisse OnCreate() und OnCloseQuery() deiner Form mit dem Grid sind sehr gut geeignet um die Spaltenreihenfolge im Grid herzustellen bzw. zu speichern.
marabu |
Re: Spalten eines DBGrid in INI-Datei speichern
Hi,
Danke. Aber die Zugriffsverletzung kommt imma noch. Habe das über Buttons gemacht und mit Memo ,da ging es. Kann es sein das mit der TStings was nicht so stimmt. Danke. PS: Habe mit `TStrings noch wenig gemacht, Danke. |
Re: Spalten eines DBGrid in INI-Datei speichern
sl wird außerhalb von den Load- und Save-Routinen instanziiert:
Delphi-Quellcode:
Du hast doch nicht etwa versucht TStrings zu erzeugen?
var
sl: TStringList; begin sl := TStringList.Create; SaveColumnOrder(DBGrid.Columns, sl); ini.WriteString('Grid.Settings', 'ColumnOrder', sl.CommaText); sl.Free; end; marabu |
Re: Spalten eines DBGrid in INI-Datei speichern
Danke.
Werde ich a mal testen, Ich habe es jetzt mit einer Ini gelöst. Klappt 1 A hab es nur noch in ontitleclick auch noch einfügen müßen,weil ich da die Sortierung mache. BSP: procedure TForm1.Button43Click(Sender: TObject); //LOAD var i: integer; begin for i := 0 to dbgrid1.columns.Count - 1 do with dbgrid1.columns.Items[i] do Index := ini.readinteger('Reihenfolge_Arbeitsscheine',Field Name,i); end; procedure TForm1.Button44Click(Sender: TObject);//SAve var i: integer; begin for i := 0 to dbgrid1.columns.Count - 1 do begin ini.Writeinteger('Reihenfolge_Arbeitsscheine',dbgr id1.columns.Items[i].FieldName,i); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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