Delphi: samodejno prilagodite širine stolpcev DBGrid

Zasnovan tako, da uporabniku omogoča ogled in urejanje podatkov v tabeli, omrežje DBGrid ponuja različne načine prilagajanja načina, kako predstavlja "svoje" podatke. S toliko prožnosti, a Delphi razvijalec lahko vedno najde nove načine, kako ga narediti močnejšega.

Ena od manjkajočih lastnosti TDBGrid je, da ni možnosti samodejnega prilagajanja širin določenih stolpcev, da bi popolnoma ustrezali širini odjemalca mreže. Ko spremenite velikost komponente DBGrid med izvajanjem, širine stolpcev ne spremenimo velikosti.

Če je širina DBGrid večja od skupne širine vseh stolpcev, boste takoj po zadnjem stolpcu dobili prazno območje. Če je skupna širina vseh stolpcev večja od širine DBGrid, se prikaže horizontalna drsna vrstica.

Samodejno prilagodite širine stolpcev DBGrid

Sledi vam en priročen postopek, ki določi širine izbirnih stolpcev DBGrid, ko se spreminja velikost omrežja med izvajanjem.

Pomembno je upoštevati, da je običajno treba samo dva do tri stolpce v DBGrid samodejno spremeniti; vsi drugi stolpci prikazujejo nekaj podatkov "statične širine". Na primer, lahko vedno določite fiksno širino za stolpce, ki prikazujejo vrednosti iz podatkovnih polj, ki so predstavljena s TDateTimeField, TFloatField, TIntegerField in podobno.

instagram viewer

Še več, verjetno boste v urejevalniku polja ustvarili (ob načrtovanju) obstojne komponente polja in tako določili polja v naboru podatkov, njihove lastnosti in njihovo urejanje. S potomskim objektom TField lahko z lastnostjo Tag označite, da mora biti določen stolpec, ki prikazuje vrednosti za to polje, samodejno velikost.

To je ideja: Če želite, da stolpec samodejno prilagodi razpoložljivi prostor, dodelite celo število za lastnost Oznaka potomca TField, ki označuje najmanjšo širino stolpca.

Postopek FixDBGridColumnWidth

Preden začnete, v OnCreate dogodek za objekt Form, ki vsebuje DBGrid, določite, katere stolpce je treba samodejno spremeniti, tako da za lastnost Tag ustreznega objekta TField dodelite vrednost, ki ni nič.

postopek TForm1.FormCreate (Pošiljatelj: TObject);
začeti
// nastavite samodejno prilagodljive stolpce z dodelitvijo
// Minimm širina v lastnosti Tag.

// z uporabo fiksne vrednosti: 40 px
Tabela1.FieldByName ('FirstName'). Oznaka: = 40;
// z uporabo spremenljive vrednosti: širina
// privzeto besedilo naslova stolpca
Tabela1.FieldByName ('LastName'). Oznaka: = 4 + Canvas. TextWidth (Table1.FieldByName ('LastName'). DisplayName);
konec
;

V zgornji kodi je Tabela1 komponenta TTable, povezana z DataSource komponenta, ki je povezan z DBGrid. Lastnost Table1.Table kaže na tabelo zaposlenega DBDemos.

Označili smo stolpce, ki prikazujejo vrednosti za polja FirstName in LastName, ki jih je mogoče samodejno spremeniti. Naslednji korak je, da pokličete našo širino FixDBGridColumnsWidth v obdelovalcu dogodkov OnResize za obrazec:

postopek TForm1.FormResize (Pošiljatelj: TObject);
začeti
FixDBGridColumnsWidth (DBGrid1);
konec
;

Opomba: Vse to je smiselno, če lastnost Poravnava DBGrid vključuje eno od naslednjih vrednosti: alTop, alBottom, alClient ali alCustom.

Na koncu je tu še koda postopka FixDBGridColumnWidth:

postopek FixDBGridColumnsWidth (konst DBGrid: TDBGrid);
var
i: celo število; TotWidth: celo število; VarWidth: celo število; ResizableColumnCount: celo število; AColumn: TColumn;
začeti
// skupna širina vseh stolpcev pred velikostjo
TotWidth: = 0;
// kako razdeliti morebiten dodaten prostor v mreži
VarWidth: = 0;
// koliko stolpcev je treba samodejno spremeniti v velikost
ResizableColumnCount: = 0;
za i: = 0 do -1 + DBGrid. Stolpci. Štet dobegin
TotWidth: = TotWidth + DBGrid. Stolpci [i]. Širina;
če DBGrid. Stolpci [i]. Oznaka 0 torej
Inc (ResizableColumnCount);
konec;
// za vrstico ločevalca stolpcev dodajte 1pxče dgColLines v DBGrid. Opcije torej
TotWidth: = TotWidth + DBGrid. Stolpci. Štetje;
// dodajte indikator širino stolpcače dgIndicator v DBGrid. Opcije torej
TotWidth: = TotWidth + IndicatorWidth;
// širina vale "levo"
VarWidth: = DBGrid. ClientWidth - TotWidth;
// Enako porazdeli VarWidth
// v vse stolpce z možnostjo samodejnega spreminjanja
če Spremeni velikostColumnCount> 0 torej
VarWidth: = varWidth div ResizableColumnCount;
za i: = 0 do -1 + DBGrid. Stolpci. Štet dobegin
ACOLumn: = DBGrid. Stolpci [i];
če ACOLumn. Polje. Oznaka 0 potem začet
ACOLumn. Širina: = stolpec. Širina + VarWidth;
če ACOLumn. Širina torej
ACOLumn. Širina: = stolpec. Polje. Oznaka;
konec;
konec;
konec
; (* FixDBGridColumnsWidth *)