Ú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.
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ő oszlophozha 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 *)