Ich versuche, einen Rahmen mit einem DBGrid
zu erstellen, der für mehr als 10 Tabellen mit der Hälfte seiner Felder als Standard und anderen Feldern exklusiv für jede Tabelle dienen soll.
Da der Platz für die Spalten begrenzt ist und ich nicht jede Spalte jeder Tabelle manuell konfigurieren möchte, weil die Arbeit sehr schlecht ist, habe ich nach einer Möglichkeit gesucht, die Breite jeder Spalte nach dem größten Inhalt einer Tabelle zu berechnen Zeile innerhalb dieser Spalte, gemessen anhand der eigenen Komponente oder des Datensatzes.
Kennt jemand den Weg? Gibt es auf der Welt einige benutzerdefinierte Komponenten mit dieser Stärke? Ich benötige eine Lösung, die die Größenänderung und -abnahme entsprechend den sichtbaren Daten in den sichtbaren Spalten des Rasters implementiert. Meine Lösung hatte bisher ein Problem mit dem Malen der ausgewählten Zelle, die aus der ausgewählten Datensatzzeile springt.
Hinweis: Bitte, schließen Sie meine Frage nicht. Es geht nicht um die Anpassung an die Breite des Rasters oder die Breite des Formulars. Es geht um alle Spaltenbreiten, um die horizontale Bildlaufleiste zu minimieren, aber nicht unbedingt auszublenden.
Sie müssen die Arbeitsfläche des Gitters verwenden, um den Inhalt jeder Spalte zu messen und die Spaltenbreite entsprechend anzupassen. Sie können entweder das Dataset durchlaufen oder das OnColumnDraw-Event verwenden, um die Breite im laufenden Betrieb anzupassen.
Hier ist ein Beispiel (ich musste einen Offset von 5 Pixeln verwenden)
%Vor%EDITED:
Mein erster Code bestand darin, die Spalten innerhalb des Gitters anzupassen. Mit diesem neuen Code liest AutoSizeColumns die Datensätze, um die Breite jeder Spalte bis MaxRows oder Dataset.Eof:
zu berechnen %Vor%Ich rufe es im DataSet.AfterOpen-Ereignis auf:
%Vor% Für jede Spalte, die automatisch skaliert werden soll, legen Sie die Eigenschaft SizePriority=1
und für feste Spalten SizePriority=0
fest, in Ihrem Fall wird nur die letzte Spalte automatisch skaliert.
Dann setze die Eigenschaft grid.AutoFillColumns=true
und das sollte es tun.
Diese Lösung bewirkt, dass alle Spalten je nach Inhalt erweitert oder verkleinert werden, ohne dass es sich dabei um Bildlaufleisten oder nicht handelt, und beheben Sie die Fehlfunktion der ausgewählten Zellenzeichnung und die Fehlfunktion des Datensatzzeigers.
%Vor%Tags und Links database delphi delphi-2006 tdbgrid