Wie passt / skaliert DBGrid (oder andere ähnliche) Spaltenbreiten entsprechend ihrem Inhalt?

8

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.

    
PSyLoCKe 08.11.2012, 16:10
quelle

5 Antworten

8

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%     
alzaimar 08.11.2012, 18:08
quelle
7

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%     
Cesar Romero 08.11.2012 16:40
quelle
1

Warum man so komplizierten Code benutzt? : D Benutze das einfach. Es hat auch 5 px Offset.

%Vor%     
sarram 01.05.2014 06:48
quelle
1

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.

    
jacques 14.01.2016 15:18
quelle
0

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%     
PSyLoCKe 19.11.2012 22:16
quelle