Delphi: kohandage DBGrid-i veeru laiused automaatselt

Mõeldud kasutajale andmete vaatamiseks ja redigeerimiseks tabelina ruudustikus, DBGrid pakub erinevaid viise, kuidas kohandada viisi, kuidas see oma andmeid kujutab. Nii palju paindlikkust, a Delphi arendaja võib alati leida uusi võimalusi selle võimsamaks muutmiseks.

Üks TDBGrid puuduvatest funktsioonidest on see, et puudub võimalus konkreetsete veergude laiust automaatselt reguleerida, et see sobiks täielikult ruudustiku kliendilaiusega. Kui muudate DBGrid-komponendi suurust käitustöö ajal, siis veerulaiuse suurust ei muudeta.

Kui DBGrid on laius suurem kui kõigi veergude kogulaius, saate kohe pärast viimast veergu tühja ala. Teisest küljest, kui kõigi veergude kogulaius on suurem kui DBGrid, siis ilmub horisontaalne kerimisriba.

Reguleerige DBGrid-i veeru laiused automaatselt

Järgige ühte käepärast protseduuri, mis fikseerib selektiivsete DBGrid-veergude laiused, kui ruudustiku suurust muudetakse töö ajal.

Oluline on märkida, et tavaliselt tuleb DBGridis ainult kaks kuni kolm veergu automaatselt muuta; kõigis teistes veergudes kuvatakse mõned staatilise laiusega andmed. Näiteks saate alati määrata veergude fikseeritud laiuse, mis kuvavad väärtusi andmeväljadelt, mis on esindatud TDateTimeField, TFloatField, TIntegerField jms abil.

instagram viewer

Veelgi enam, tõenäoliselt loote (kujundamise ajal) püsiväljade komponendid väljade redigeerija abil, et täpsustada andmestiku väljad, nende omadused ja järjekord. TFieldi alaneva objekti korral saate atribuuti Silt kasutada, et näidata, et konkreetne veerg, mis näitab selle välja väärtusi, peab olema automaatse suurusega.

See on idee: kui soovite, et veerg mahutaks olemasoleva ruumi automaatselt, määrake TFieldi järeltulija omadusele Silt täisarv, mis näitab vastava veeru minimaalset laiust.

FixDBGridColumnWidth protseduur

Enne alustamist jaotises OnCreate'i sündmus DBGridi sisaldava vormi objekti jaoks määrake, milliseid veerge tuleb automaatselt muuta, määrates vastava TFieldi objekti atribuudile Tag nullist erineva väärtuse.

protseduur TForm1.FormCreate (saatja: TObject);
alustada
// seadista autoresizable veerud määrates
// Minimi laius atribuudis Silt.

// kasutades fikseeritud väärtust: 40 pikslit
Tabel1.FieldByName ('FirstName'). Silt: = 40;
// kasutades muutuvat väärtust:
// vaikimisi veeru pealkirja tekst
Tabel1.FieldByName ('LastName'). Silt: = 4 + lõuend. Tekstilaius (tabel1.FieldByName ('LastName'). DisplayName);
lõpp
;

Ülaltoodud koodis on tabel 1 TT-komponent, mis on ühendatud a-ga DataSource komponent, mis on seotud DBGridiga. Tabel1.TABEL atribuut osutab tabelile DBDemos Employee.

Märkisime veerud, mis kuvavad väljade Eesnimi ja Perekonnanimi väärtused, automaatselt muudetavaks. Järgmine samm on helistada meie vormingule OnResize sündmuste käitlejas meie FixDBGridColumnWidth:

protseduur TForm1.FormResize (saatja: TObject);
alustada
FixDBGridColumnWidth (DBGrid1);
lõpp
;

Märge: Kõik see on mõttekas, kui DBGridi joondamise atribuut sisaldab ühte järgmistest väärtustest: alTop, alBottom, alClient või alCustom.

Lõpuks, siin on protseduuri FixDBGridColumnsWidth kood:

protseduur FixDBGridColumnWidth (const DBGrid: TDBGrid);
var
i: täisarv; Kogulaius: täisarv; VarWidth: täisarv; ResizableColumnCount: täisarv; ACkolonn: TColumn;
alustada
// kõigi veergude kogulaius enne suuruse muutmist
Kogulaius: = 0;
// kuidas ruudustikus lisaruumi jagada
VarWidth: = 0;
// mitu veergu tuleb automaatselt muuta
ResizableColumnCount: = 0;
jaoks i: = 0 kuni -1 + DBGrid. Veerud. Krahv dobegin
Kogulaius: = kogulaius + DBGrid. Veerud [i] .Laius;
kui DBGrid. Veerud [i]. Silt 0 siis
Inc (ResizableColumnCount);
lõpp;
// lisage veeru eraldaja reale 1 pxkui dgColLines DBGridis. Valikud siis
Kogulaius: = kogulaius + DBGrid. Veerud. Krahv;
// lisage indikaatori veeru laiuskui dgIndicator DBGridis. Valikud siis
Kogulaius: = kogulaius + indikaatori laius;
// laius vale "vasakul"
VarWidth: = DBGrid. Kliendilaius - kogulaius;
// Jagage võrdselt VarWidth
// kõigile automaatselt muudetavale veergudele
kui ResizableColumnCount> 0 siis
VarWidth: = varWidth div ResizableColumnCount;
jaoks i: = 0 kuni -1 + DBGrid. Veerud. Krahv dobegin
AC-veerg: = DBGrid. Veerud [i];
kui ACkolonn. Väli. Silt 0 siis alustatakse
ACkolonn. Laius: = ACveerg. Laius + VarWidth;
kui ACkolonn. Laius siis
ACkolonn. Laius: = ACveerg. Väli. Silt;
lõpp;
lõpp;
lõpp
; (* FixDBGridColumnWidth *)