Jak automatycznie naprawić szerokość kolumn DBGrid?

Zaprojektowany, aby umożliwić użytkownikowi przeglądanie i edycję danych w siatce tabelarycznej,DBGridudostępnia różne sposoby dostosowywania sposobu przedstawiania „swoich” danych. Przy tak dużej elastyczności, a Delfy programista zawsze może znaleźć nowe sposoby na zwiększenie jego możliwości.





Jedną z brakujących cech TDBGrid jest to, że nie ma opcji automatycznego dostosowania szerokości określonych kolumn, aby całkowicie dopasować szerokość klienta siatki. Gdy zmieniasz rozmiar składnika DBGrid w czasie wykonywania, szerokości kolumn nie są zmieniane.

Jeśli szerokość DBGrid jest większa niż całkowita szerokość wszystkich kolumn, otrzymasz pusty obszar zaraz po ostatniej kolumnie. Z drugiej strony, jeśli całkowita szerokość wszystkich kolumn jest większa niż szerokość DBGrid, pojawi się poziomy pasek przewijania.



Automatycznie dostosuj szerokość kolumn DBGrid

Jest jedna przydatna procedura, którą możesz wykonać, która naprawia szerokości selektywnych kolumn DBGrid, gdy siatka jest zmieniana w czasie wykonywania.

Należy zauważyć, że zwykle tylko dwie do trzech kolumn w DBGrid faktycznie wymagają automatycznej zmiany rozmiaru; wszystkie pozostałe kolumny wyświetlają pewne dane o „szerokości statycznej”. Na przykład zawsze można określić stałą szerokość kolumn wyświetlających wartości z pól danych, które są reprezentowane przez TDateTimeField, TFloatField, TIntegerField i podobne.



Co więcej, prawdopodobnie utworzysz (w czasie projektowania) trwałe składniki pól za pomocą edytora pól, aby określić pola w zestawie danych, ich właściwości i ich kolejność. W przypadku obiektu potomnego TField można użyć właściwości Tag, aby wskazać, że określona kolumna wyświetlająca wartości dla tego pola musi mieć automatyczny rozmiar.

Oto pomysł: jeśli chcesz, aby kolumna automatycznie dopasowywała się do dostępnego miejsca, przypisz wartość całkowitą do właściwości Tag potomka TField, która wskazuje minimalną szerokość odpowiedniej kolumny.

Procedura FixDBGridColumnsWidth

Zanim zaczniesz, wWydarzenie On Createdla obiektu Form zawierającego DBGrid określ, które kolumny mają być automatycznie zmieniane poprzez przypisanie niezerowej wartości dla właściwości Tag odpowiedniego obiektu TField.

|_+_|

W powyższym kodzie Table1 jest komponentem TTable połączonym z aKomponent DataSource, który jest połączony z DBGrid. Właściwość Table1.Table wskazuje na tabelę DBDemos Employee.



Oznaczyliśmy kolumny wyświetlające wartości pól Imię i Nazwisko, które mają być automatycznie zmieniane. Następnym krokiem jest wywołanie naszego FixDBGridColumnsWidth w obsłudze zdarzeń OnResize dla formularza:

|_+_|

Notatka: Wszystko to ma sens, jeśli właściwość Align DBGrid zawiera jedną z następujących wartości: alTop, alBottom, alClient lub alCustom.



Na koniec oto kod procedury FixDBGridColumnsWidth:

|_+_|