Delphi: automātiski pielāgojiet DBGrid kolonnu platumu

click fraud protection

Paredzēts, lai lietotājs varētu skatīt un rediģēt datus tabulas režģī, DBGrid piedāvā dažādus veidus, kā pielāgot to, kā tas attēlo "savus" datus. Ar tik lielu elastību, a Delfi izstrādātājs vienmēr var atrast jaunus veidus, kā padarīt to jaudīgāku.

Viena no trūkstošajām TDBGrid funkcijām ir tāda, ka nav iespēju automātiski pielāgot noteiktu kolonnu platumu, lai tas pilnībā atbilstu režģa klienta platumam. Ja maināt DBGrid komponenta izpildlaiku, kolonnu platums netiek mainīts.

Ja DBGrid platums ir lielāks par visu kolonnu kopējo platumu, tūlīt pēc pēdējās kolonnas jūs saņemsit tukšu zonu. No otras puses, ja visu kolonnu kopējais platums ir lielāks par DBGrid platumu, parādīsies horizontāla ritjosla.

Automātiski pielāgojiet DBGrid kolonnu platumu

Ir viena ērta procedūra, kuru varat ievērot un kura nosaka selektīvo DBGrid kolonnu platumus, kad režģis tiek mainīts lielumā izpildlaikā.

Svarīgi ņemt vērā, ka parasti tikai divām līdz trim DBGrid kolonnām ir jābūt automātiski mainītām; visās pārējās kolonnās tiek parādīti daži "statiskā platuma" dati. Piemēram, jūs vienmēr varat norādīt fiksētu platumu kolonnām, kurās tiek parādītas vērtības no datu laukiem, kuri tiek parādīti ar TDateTimeField, TFloatField, TIntegerField un tamlīdzīgiem.

instagram viewer

Turklāt, iespējams, (projektēšanas laikā) izveidosit noturīgus lauka komponentus, izmantojot lauku Redaktors, lai norādītu laukus datu kopā, to īpašības un pasūtījumu. Izmantojot TField pēcnācēju objektu, varat izmantot īpašību Tags, lai norādītu, ka konkrētai kolonnai, kurā parādītas šī lauka vērtības, jābūt automātiskam lielumam.

Šī ir ideja: ja vēlaties, lai kolonna automātiski ietilptu pieejamo vietu, TField pēcnācēja īpašumam Tag piešķiriet skaitli, kas norāda attiecīgās kolonnas minimālo platumu.

Procedūra FixDBGridColumnsWidth

Pirms sākat, OnCreate pasākums Objektam Form, kas satur DBGrid, norādiet, kuras kolonnas ir jāmaina automātiski, piešķirot attiecīgajam TField objektam vērtību Tag, kas nav nulle.

procedūra TForm1.FormCreate (Sūtītājs: TObject);
sākt
// iestatīt automātiski maināmas kolonnas, piešķirot
// Minimm Width īpašībā Tag.

// izmantojot fiksētu vērtību: 40 pikseļi
1. tabula. FieldByName ('FirstName'). Tags: = 40;
// izmantojot mainīgo vērtību:
// slejas nosaukuma noklusējuma teksts
Tabula1.FieldByName ('LastName'). Tag: = 4 + audekls. Teksta platums (1.1.tabula. FieldByName ('LastName'). DisplayName);
beigas
;

Iepriekš minētajā kodā 1. tabula ir TT lietojams komponents, kas saistīts ar Datu avota komponents, kas ir saistīts ar DBGrid. Tabula1.Tabula īpašums norāda uz tabulu DBDemos Employee.

Slejas, kurās parādītas FirstName un LastName vērtības, ir atzīmētas kā automātiskas mainīšanas iespējas. Nākamais solis ir piezvanīt mūsu FixDBGridColumnsWidth uz OnResize notikumu apstrādātāju formai:

procedūra TForm1.FormResize (Sūtītājs: TObject);
sākt
FixDBGridColumnsWidth (DBGrid1);
beigas
;

Piezīme: Tam visam ir jēga, ja DBGrid īpašumā Align ir viena no šīm vērtībām: alTop, alBottom, alClient vai alCustom.

Visbeidzot, šeit ir procedūras kods FixDBGridColumnsWidth:

procedūra FixDBGridColumnsWidth (const DBGrid: TDBGrid);
var
i: vesels skaitlis; Kopējais platums: vesels skaitlis; VarWidth: vesels skaitlis; ResizableColumnCount: vesels skaitlis; ACkolonna: TColonna;
sākt
// visu kolonnu kopējais platums pirms izmēru maiņas
Kopējais platums: = 0;
// kā sadalīt jebkuru papildu vietu režģī
VarWidth: = 0;
// cik kolonnu ir jāmaina automātiski
ResizableColumnCount: = 0;
priekš i: = 0 uz -1 + DBGrid. Kolonnas. Grāfs dobegin
TotWidth: = TotWidth + DBGrid. Kolonnas [i] .Platums;
ja DBGrid. Kolonnas [i] .Lauks. 0 birka tad
Inc (ResizableColumnCount);
beigas;
// kolonnu atdalītāja rindiņai pievienojiet 1 pikseļuja dgColLines DBGrid. Iespējas tad
TotWidth: = TotWidth + DBGrid. Kolonnas. Grāfs;
// pievienot indikatora kolonnas platumuja dgIndicator programmā DBGrid. Iespējas tad
Kopējais platums: = kopējais platums + indikatora platums;
// platums vale "pa kreisi"
VarWidth: = DBGrid. Klienta platums - kopējais platums;
// Vienādi sadaliet VarWidth
// uz visām automātiski maināmām kolonnām
ja ResizableColumnCount> 0 tad
VarWidth: = varWidth div ResizableColumnCount;
priekš i: = 0 uz -1 + DBGrid. Kolonnas. Grāfs dobegin
ACkolonna: = DBGrid. Kolonnas [i];
ja ACkolonna. Lauks. 0 birka tad sāk
ACkolonna. Platums: = AC kolonna. Platums + VarWidth;
ja ACkolonna. Tad platums
ACkolonna. Platums: = AC kolonna. Lauks. Birka;
beigas;
beigas;
beigas
; (* FixDBGridColumnsWidth *)
instagram story viewer