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.