Delphi: Automatické nastavenie šírky stĺpca DBGrid

Je navrhnutý tak, aby používateľovi umožnil prezerať a upravovať údaje v tabuľkovej mriežke DBGrid poskytuje rôzne spôsoby prispôsobenia spôsobu, akým predstavuje „svoje“ údaje. S toľkou flexibilitou a Delphi vývojár vždy nájde nové spôsoby, ako ho vylepšiť.

Jednou z chýbajúcich funkcií programu TDBGrid je, že neexistuje žiadna možnosť na automatické prispôsobenie šírky konkrétnych stĺpcov tak, aby sa úplne prispôsobili šírke klienta siete. Keď zmeníte veľkosť komponentu DBGrid za behu, šírka stĺpca sa nezmení.

Ak je šírka DBGrid väčšia ako celková šírka všetkých stĺpcov, hneď za posledným stĺpcom získate prázdnu oblasť. Na druhej strane, ak je celková šírka všetkých stĺpcov väčšia ako šírka DBGrid, zobrazí sa vodorovná posuvná lišta.

Automatické nastavenie šírky stĺpca DBGrid

Existuje jedna praktická procedúra, ktorou môžete riadiť šírky selektívnych stĺpcov DBGrid, keď sa veľkosť mriežky zmení za behu.

Je dôležité si uvedomiť, že obyčajne je potrebné automaticky zmeniť veľkosť iba dva až tri stĺpce v DBGrid; všetky ostatné stĺpce zobrazujú niektoré údaje „statickej šírky“. Napríklad vždy môžete určiť pevnú šírku pre stĺpce zobrazujúce hodnoty z dátových polí, ktoré sú reprezentované TDateTimeField, TFloatField, TIntegerField a podobne.

instagram viewer

A čo viac, pravdepodobne vytvoríte (v čase návrhu) trvalé komponenty poľa pomocou editora polí, aby ste určili polia v množine údajov, ich vlastnosti a ich poradie. S potomkom objektu TField môžete pomocou vlastnosti Tag označiť, že konkrétny stĺpec zobrazujúci hodnoty pre toto pole musí byť automatický.

Toto je myšlienka: Ak chcete, aby sa stĺpec automaticky prispôsobil dostupnému priestoru, priraďte pre vlastnosť Tag potomka TField celé číslo, ktoré označuje minimálnu šírku zodpovedajúceho stĺpca.

Procedúra FixDBGridColumnsWidth

Než začnete, v Udalosť OnCreate pre objekt Form obsahujúci DBGrid špecifikujte, ktoré stĺpce je potrebné automaticky zmeniť veľkosť, a to tak, že priraďujete nenulovú hodnotu pre vlastnosť Tag príslušného objektu TField.

procedúra TForm1.FormCreate (Sender: TObject);
začať
// nastaví autorizovateľné stĺpce priradením
// Minimálna šírka vo vlastnosti Tag.

// pomocou pevnej hodnoty: 40 px
Table1.FieldByName ('FirstName'). Tag: = 40;
// použitie premennej hodnoty: šírka
// predvolený text názvu stĺpca
Table1.FieldByName ('LastName'). Tag: = 4 + Canvas. TextWidth (Table1.FieldByName ('LastName'). DisplayName);
koniec
;

Vo vyššie uvedenom kóde je tabuľka TTT komponentom spojeným s a Komponent DataSource, ktorá je prepojená s DBGrid. Vlastnosť Table1.Table odkazuje na tabuľku Employee DBDemos.

Stĺpce zobrazujúce hodnoty pre polia Meno a Priezvisko sa označili ako automaticky zmeniteľné. Ďalším krokom je volanie nášho súboru FixDBGridColumnsWidth v obslužnej rúre udalosti OnResize pre formulár:

procedúra TForm1.FormResize (Sender: TObject);
začať
FixDBGridColumnsWidth (DBGrid1);
koniec
;

Poznámka: To všetko má zmysel, ak vlastnosť Zarovnanie DBGrid obsahuje jednu z nasledujúcich hodnôt: alTop, alBottom, alClient alebo alCustom.

Nakoniec, tu je kód postupu FixDBGridColumnsWidth:

procedúra FixDBGridColumnsWidth (const DBGrid: TDBGrid);
var
i: celé číslo; TotWidth: celé číslo; VarWidth: celé číslo; ResizableColumnCount: celé číslo; AColumn: TColumn;
začať
// celková šírka všetkých stĺpcov pred zmenou veľkosti
Šírka šírky: = 0;
// ako rozdeliť ďalší priestor v mriežke
VarWidth: = 0;
// koľko stĺpcov musí byť automaticky zmenená veľkosť
ResizableColumnCount: = 0;
pre i: = 0 na -1 + DBGrid. Stĺpy. počítať dobegin
TotWidth: = TotWidth + DBGrid. Stĺpce [i] .Width;
ak DBGrid. Stĺpce [i] .Field. Značka 0 potom
Inc (ResizableColumnCount);
koniec;
// pridajte 1px pre riadok oddeľovača stĺpcovak dgColLines v DBGrid. možnosti potom
TotWidth: = TotWidth + DBGrid. Stĺpy. počítať;
// pridať šírku stĺpca indikátoraak dgIndikátor v DBGrid. možnosti potom
TotWidth: = TotWidth + IndicatorWidth;
// šírka vale "left"
VarWidth: = DBGrid. ClientWidth - TotWidth;
// Rovnomerne distribuujte VarWidth
// do všetkých automaticky upraviteľných stĺpcov
ak ResizableColumnCount> 0 potom
VarWidth: = varWidth div ResizableColumnCount;
pre i: = 0 na -1 + DBGrid. Stĺpy. počítať dobegin
AColumn: = DBGrid. Stĺpce [i];
ak AColumn. Lúka. Značka 0 thenbegin
AColumn. Šírka: = AColumn. Width + VarWidth;
ak AColumn. Šírka potom
AColumn. Šírka: = AColumn. Lúka. tag;
koniec;
koniec;
koniec
; (* FixDBGridColumnsWidth *)