AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken DataSet überschreibt Formatierungen
Thema durchsuchen
Ansicht
Themen-Optionen

DataSet überschreibt Formatierungen

Ein Thema von Ykcim · begonnen am 22. Feb 2017 · letzter Beitrag vom 23. Feb 2017
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#1

DataSet überschreibt Formatierungen

  Alt 22. Feb 2017, 16:05
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
Hallo Zusammen,

ich bin mir nicht sicher, ob mein Problem in die Datenbank-Sparte oder zum allgemeinen Programmieren gehört.

Ich arbeite das erste Mal mit datensensitiven Komponenten und habe ein Problem mit der Formatierung. Ich lade die Daten in ein DataSource und habe ein DBGrid damit verbunden.
Die Daten werden sauber übertragen und ich habe in dem Grid die einzelnen Spalten formatiert.
Beim ersten Mal, wenn ich die Daten lade, sieht alles halbwegs gut aus (siehe Bild RICHTIG). Aber danach, also ab dem zweiten Laden wird die Formatierung nicht mehr berücksichtigt (siehe Bild FALSCH). Kennt jemand das Problem und hat jemand eine Idee?

Vielen Dank
Patrick
Miniaturansicht angehängter Grafiken
falsch.jpg   richtig.jpg  
Patrick
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: DataSet überschreibt Formatierungen

  Alt 22. Feb 2017, 17:29
Werde jetzt erstmal ein bisserl raten:

Vermutlich hast Du die "Titel" des DB-Grids in der Entwicklungsumgebung gesetzt.

Das was man dort einträgt, wird (sofern es mit der Ergebnissmenge des DataSets übereinstimmt) angezeigt.
Schließt man nun das Dataset, dann vergisst das DBGrid alle Informationen.

Öffnet man das Dataset, so erstellt das DBGrid aus den Informationen eine neue "Ansicht". Die Titel werden aus den Spaltennamen gebildet, die Spaltenbreite wird automatisch gesetzt, so dass die Daten passabel angezeigt werden können. Dies muss nicht zwingend mit den Wünschen von Entwickler und / oder Anwender übereinstimmen.

Wenn ich eine (aus optischer Sicht) statisch Anzeige in einem DBGrid wünsche, so speichere ich mir diese beim Programmende ab:

DBGrid1.Columns.SaveToFile(Format('.\%s.cfg',[DBGrid1.Name]));

und lade sie beim Programmstart wieder:
Delphi-Quellcode:
  s := Format('.\%s.cfg',[DBGrid1.Name]);
  if FileExists(s) then DBGrid1.Columns.LoadFromFile(s);
Solange kein DBGrid1.Columns.Clear aufgerufen wird, werden alle Daten in dem so gespeicherten "Outfit" angezeigt (übrigens unabhängig davon, ob das zur Datenmenge passt oder nicht. Was nicht passt, wird nicht angezeigt, kann also durchaus auch mal für Verwirrung sorgen.)

Nutze dieses Vorgehen eigentlich nur, wenn zur gesamten Programmlaufzeit nur eine Datenmenge im Grid angezeigt wird und Änderungen an den Daten ausschließlich über das Grid erfolgen.

Für wechselnde Datenmengen ist das so nicht geeignet.
Hier muss man dann nach dem Öffnen der Datenmenge jeweils selbst für die passende Beschriftung der Spaltenüberschriften und -breiten sorgen.
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: DataSet überschreibt Formatierungen

  Alt 22. Feb 2017, 19:20
Hallo Stephan,

vielen Dank. Du hast richtig geraten. Ich habe die Einstellungen über den OI gemacht. Da die Daten in dem Grid sich tatsächlich nicht ändern und nur über dieses bearbeitet werden sollen, könnte Deine beschriebene Vorgehensweise interessant sein. Ich verstehe nur nicht, warum das Programm zur Laufzeit die Einstellungen verliert. Nach jedem Programm-Start wird es beim ersten Mal wieder richtig gemacht.
Ich will noch ein paar Sachen ausprobieren und melde mich dann mit Erfolg oder Misserfolgen.

Vielen Dank!
Patrick
Patrick
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: DataSet überschreibt Formatierungen

  Alt 22. Feb 2017, 19:36
Wenn man eine Datenmenge schließt, werden auch die Einstellungen für Titel ... des Grids entfernt.

Zumindest bei Delphi 7 ist es so, dass in dem Moment, in dem man die Datenmenge schließt, im Grid nur noch eine leere Zelle mit 'nem leeren Titel steht.

Öffnet man nun die Datenmenge wieder, so wird aus der Datenmenge die Zahl der anzuzeigenden Spalten (incl. Titel), deren Breite und die anzuzeigenden Zeilen ermittelt.

Nur so ist sicherzustellen, dass z. B. bei 'ner Abfrage, die ja bei jeder Ausführung an anderes Select enthalten kann, immer die aktuellen Daten mit passenden Titeln angezeigt werden.

Beim ersten Öffnen einer Datenmenge gelten wohl noch die Einstellungen aus dem Objektinspektor.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.338 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: DataSet überschreibt Formatierungen

  Alt 23. Feb 2017, 06:07
Ich habe mir schon vor einer gefühlten Ewigkeit abgewöhnt, die Einstellungen für die Spalten im OI zu machen.
Bei mir werden die Einstellungen im AfterOpen des DataSets gemacht. Ist zwar ein wenig Tipp-Arbeit, aber eigentlich kaum mehr Aufwand, als das im OI zu machen.
Danach ist es egal, welches DBrid die Daten anzeigt oder ein DBGrid verschiedene Daten-Quellen abwechselnd anzeigt.

Ich habe sogar mal eine kleine Komponente gebastelt, mit der der Anwender die Darstellung einstellen kann. Ist aber beim Support natürlich etwas nervig, wenn die Spalten eine andere Reihenfolge haben oder nicht angezeigt werden.
Peter
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: DataSet überschreibt Formatierungen

  Alt 23. Feb 2017, 10:53
Hallo Patrick,

Du kannst das Grid z. B. auf folgende Art und Weise einstellen:

Delphi-Quellcode:
   GridJahr.Columns[0].Title.Caption    := 'Monat';
   GridJahr.Columns[0].Title.Alignment   := taLeftJustify;
   GridJahr.Columns[0].Width            := 80;
   GridJahr.Columns[1].Title.Caption    := 'Teile ' + IntToStr(Jahr); // aktuelles Jahr
   GridJahr.Columns[1].Title.Alignment   := taRightJustify;
   GridJahr.Columns[1].Width            := 80;
   GridJahr.Columns[2].Title.Caption    := 'Teile ' + IntToStr(Jahr - 1); // Vorjahr
   GridJahr.Columns[2].Title.Alignment   := taRightJustify;
   GridJahr.Columns[2].Width            := 80;
und die Feldinhalte so formatieren

Delphi-Quellcode:
// beachte die Indices!!
   TFloatField(qryJahr.Fields[1]).DisplayFormat := '##,###,##0';
   TFloatField(qryJahr.Fields[2]).DisplayFormat := '##,###,##0';
die Daten werden dann so ausgegeben:

Delphi-Quellcode:
   GridJahr.Columns[0].Field   := qryJahr.Fields[0];
   GridJahr.Columns[1].Field   := qryJahr.Fields[1];
   GridJahr.Columns[2].Field   := qryJahr.Fields[2];
Gruß
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Slipstream
(Gast)

n/a Beiträge
 
#7

AW: DataSet überschreibt Formatierungen

  Alt 23. Feb 2017, 11:21
Beim ersten Mal, wenn ich die Daten lade, sieht alles halbwegs gut aus (siehe Bild RICHTIG). Aber danach, also ab dem zweiten Laden wird die Formatierung nicht mehr berücksichtigt (siehe Bild FALSCH). Kennt jemand das Problem und hat jemand eine Idee?Patrick
Wir machen das hier immer so:
  1. Persistente Felder im zuständigen Query anlegen: Rechtsklick auf das Query und alle Felder hinzufügen auswählen.
  2. Den Feldern im OI den jeweiligen Display-Text zuweisen.
  3. Die Felder im OI entsprechend ausrichten. Voreinstellung für Integer- und Floatwerte ist rechts-, für Strings linksbündig.
  4. Im DB-Grid ebenfalls alle Felder hinzufügen: Rechtsklick auf DB-Grid.
  5. Im DB-Grid die Einstellungen für Titel-Ausrichtung anpassen. Das gilt natürlich nur, wenn man die Reihenfolge der Felder nicht verändert.
Ansonsten: Per Code die entsprechenden Einstellungen vornehmen. Soll das Ganze flexibel sein (Reihenfolge der Felder ändern möglich) und dennoch immer dieselbe Spalte mit denselben Einstellungen angezeigt werden (zB Boolean-Felder immer mittig), kann man sich mit einer Stringliste und entsprechenden Values behelfen.
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: DataSet überschreibt Formatierungen

  Alt 23. Feb 2017, 11:39
Bei persistenten Feldern kann man beispielsweise die Boolens Wert auch im OI setzen:
Miniaturansicht angehängter Grafiken
booleschefelder.png  
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz