Delphi: A DBGrid oszlopszélesség automatikus beállítása

Úgy tervezték, hogy a felhasználó megtekinthesse és szerkeszthesse az adatokat táblázatos rácsban, a DBGrid különféle lehetőségeket kínál arra, hogy testreszabja az "adatait". Nagyon sok rugalmassággal, a Delphi A fejlesztõ mindig új módszereket találhat erõteljesebbé tételére.

A TDBGrid egyik hiányzó tulajdonsága, hogy nincs lehetőség arra, hogy az egyes oszlopok szélességét automatikusan beállítsa a rács ügyfélszélességéhez. Amikor átméretezi a DBGrid összetevőt futási időben, az oszlopszélesség nem változik.

Ha a DBGrid szélessége nagyobb, mint az összes oszlop teljes szélessége, akkor az utolsó oszlop után egy üres területet kap. Másrészt, ha az összes oszlop teljes szélessége meghaladja a DBGrid szélességét, vízszintes görgetősáv jelenik meg.

A DBGrid oszlopszélesség automatikus beállítása

Van egy praktikus eljárás, amely követi a szelektív DBGrid oszlopok szélességét, amikor a rács átméretezi a futási időt.

Fontos megjegyezni, hogy általában csak egy két-három oszlopot kell egy DBGrid-ben automatikusan átméretezni; az összes többi oszlop néhány "statikus szélességű" adatot mutat. Például bármikor megadhat rögzített szélességet az oszlopok számára, amelyek az adatmezők értékeit jelenítik meg, amelyeket a TDateTimeField, TFloatField, TIntegerField és hasonlók képviselnek.

instagram viewer

Sőt, valószínűleg (a tervezés idején) állandó mezőkomponenseket hoz létre a Mezők szerkesztő használatával, hogy meghatározza az adatkészlet mezőit, tulajdonságait és sorrendjét. A TField leszármazott objektumokkal a Címke tulajdonság segítségével jelezheti, hogy az adott mező értékét megjelenítő adott oszlopnak automatikus méretűnek kell lennie.

Ez az ötlet: Ha azt szeretné, hogy egy oszlop automatikusan illeszkedjen a rendelkezésre álló területhez, rendeljen egész számot a TField leszármazott Címke tulajdonságához, amely jelzi a megfelelő oszlop minimális szélességét.

A FixDBGridColumnsWidth eljárás

Mielőtt elkezdené, a OnCreate esemény a DBGrid-et tartalmazó Form objektum esetében adja meg, hogy mely oszlopokat kell automatikusan átméretezni, a megfelelő TField objektum Címke tulajdonságának nullán kívüli érték hozzárendelésével.

eljárás TForm1.FormCreate (küldő: TObject);
kezdődik
// automatikusan méretezhető oszlopok beállítása hozzárendeléssel
// Minimm Szélesség a Címke tulajdonságban.

// rögzített érték felhasználásával: 40 képpont
1. táblázat: FieldByName ('FirstName'). Címke: = 40;
// változó érték felhasználásával: a
// alapértelmezett oszlopcímszöveg
1. táblázat: FieldByName ('LastName'). Címke: = 4 + vászon. Szövegszélesség (1.1. táblázat: FieldByName ('LastName'). DisplayName);
vég
;

A fenti kódban az 1. táblázat egy a TT-vel összekapcsolt TT-összetevő DataSource összetevő, amely kapcsolódik a DBGridhez. A Table1.Table tulajdonság a DBDemos Employee táblára mutat.

Az FirstName és a LastName mezők értékeit megjelenítő oszlopokat automatikusan átméretezhetővé tettük. A következő lépés az, hogy felhívja a FixDBGridColumnsWidth-et az OnResize eseménykezelőben az űrlapra:

eljárás TForm1.FormResize (küldő: TObject);
kezdődik
FixDBGridColumnsWidth (DBGrid1);
vég
;

Jegyzet: Mindez akkor értelmezhető, ha a DBGrid Align tulajdonsága a következő értékek egyikét tartalmazza: alTop, alBottom, alClient vagy alCustom.

Végül itt van a FixDBGridColumnsWidth eljárás kódja:

eljárás FixDBGridColumnsWidth (const DBGrid: TDBGrid);
var
i: egész szám; Teljes szélesség: egész; VarWidth: egész szám; ResizableColumnCount: egész szám; AColumn: TColumn;
kezdődik
// az összes oszlop teljes szélessége az átméretezés előtt
Teljes szélesség: = 0;
// hogyan osztható el minden további hely a rácsban
VarWidth: = 0;
// hány oszlop szükséges automatikus átméretezése
ResizableColumnCount: = 0;
mert i: = 0 nak nek -1 + DBGrid. Oszlopok. Számol dobegin
TotWidth: = TotWidth + DBGrid. Oszlopok [i] .Width;
ha DBGrid. Oszlopok [i] .Field. 0. címke azután
Inc (ResizableColumnCount);
vég;
// adjon hozzá 1px-et az oszlop elválasztó soráhozha dgColLines a DBGrid-ben. Opciók azután
TotWidth: = TotWidth + DBGrid. Oszlopok. Számol;
// hozzáadjuk a mutatóoszlop szélességétha dgIndicator a DBGrid-ben. Opciók azután
Teljes szélesség: = Teljes szélesség + Indikátorszélesség;
// szélesség vale "bal"
VarWidth: = DBGrid. ClientWidth - TotWidth;
// A VarWidth egyenletes eloszlása
// az összes automatikusan átméretezhető oszlophoz
ha ResizableColumnCount> 0 azután
VarWidth: = varWidth div ResizableColumnCount;
mert i: = 0 nak nek -1 + DBGrid. Oszlopok. Számol dobegin
AColumn: = DBGrid. Oszlopok [i];
ha AColumn. Terület. 0. címke thenbegin
AColumn. Szélesség: = ACoszlop. Szélesség + Változat;
ha AColumn. Akkor szélesség
AColumn. Szélesség: = ACoszlop. Terület. Címke;
vég;
vég;
vég
; (* FixDBGridColumnsWidth *)