![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
DataSet überschreibt Formatierungen
Liste der Anhänge anzeigen (Anzahl: 2)
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 |
AW: DataSet überschreibt Formatierungen
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:
Delphi-Quellcode:
DBGrid1.Columns.SaveToFile(Format('.\%s.cfg',[DBGrid1.Name]));
und lade sie beim Programmstart wieder:
Delphi-Quellcode:
Solange kein
s := Format('.\%s.cfg',[DBGrid1.Name]);
if FileExists(s) then DBGrid1.Columns.LoadFromFile(s);
Delphi-Quellcode:
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.)
DBGrid1.Columns.Clear
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. |
AW: DataSet überschreibt Formatierungen
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 |
AW: DataSet überschreibt Formatierungen
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. |
AW: DataSet überschreibt Formatierungen
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. |
AW: DataSet überschreibt Formatierungen
Hallo Patrick,
Du kannst das Grid z. B. auf folgende Art und Weise einstellen:
Delphi-Quellcode:
und die Feldinhalte so formatieren
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;
Delphi-Quellcode:
die Daten werden dann so ausgegeben:
// beachte die Indices!!
TFloatField(qryJahr.Fields[1]).DisplayFormat := '##,###,##0'; TFloatField(qryJahr.Fields[2]).DisplayFormat := '##,###,##0';
Delphi-Quellcode:
Gruß
GridJahr.Columns[0].Field := qryJahr.Fields[0];
GridJahr.Columns[1].Field := qryJahr.Fields[1]; GridJahr.Columns[2].Field := qryJahr.Fields[2]; |
AW: DataSet überschreibt Formatierungen
Zitat:
|
AW: DataSet überschreibt Formatierungen
Liste der Anhänge anzeigen (Anzahl: 1)
Bei persistenten Feldern kann man beispielsweise die Boolens Wert auch im OI setzen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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 by Thomas Breitkreuz