Delphi – Unapređenje funkcionalnosti DBgrid kontrole

U ovom prilogu ćemo se pozabaviti jednim od mogućih aspekata unapređenja funkcionalnosti DBgrid komponente, i to korišćenjem boja za kolorisanja „rešetki“ oformljenih na osnovu podataka iz neke baze podataka. Korišćenjem boja unapredićemo prikaz podataka, tj. povećati uočljivost podataka po kolonama ili redovima. Pošto je DBgrid koponenta odlična komponenta korisničkog interfejsa za prikaz podataka, u ovom prilogu ćemo posebno obraditi temu: kako promeniti pozadinsku boju određenih redova/kolona/ćelija u „rešetki“ komponente DBGrid?.

Pri objašnjavanju ćemo pretpostaviti da znate kako se komponenta DBGrid konektuje na bazu podataka. A ako niste baš upućeni, iskoristite čarobnjak Database Form Wizard za kreiranje forme za naš primer. Za primer selektujte podatke iz tabele employee.db, alijasa DBDemos, baze podataka koja dolazi uz instalaciju Delphi-ja. Iz tabele selektujte sva polja osim polja „EmpNo“.

Prva stvar (i najlakša) koju možete odraditi u cilju unapređenja korisničkog interfejsa jeste kolorisanje pojedinačnih kolona koje se nalaze u tabeli podataka („rešetki“). Ovo ćemo obaviti preko osobine TColumns rešetke. Selektujte komponentu DBgrid na formi i pozovite editor kolona („Columns editor“) klikom na osobinu Columns unutar „Object Inspector“-a. Sve što treba da uradite je da odredite pozadinsku boju ćelija određene kolone, a boju teksta možete menjati preko font osobine. Nakon nekoliko klikova dobićete rešetku kao ovu na slici. Morate se složiti da je ovakav prikaz mnogo bolji od standardne crno-bele varijante.

Ukoliko želite da obojite određeni red (znači, slog ili podatak) unutar DBGrid-a, a ne želite da koristite opciju dgRowSelect zato što želite da budete u mogućnosti da editujete podatke – iskoristite događaj DBGrid.OnDrawColumnCell. Sledećom tehnikom ćemo vam predstaviti kako možete dinamički da menjate boju teksta u DBGrid-u:


procedure TForm1.DBGrid1DrawColumnCell
(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Table1.FieldByName(‘Salary’).AsCurrency > 20000 then
DBGrid1.Canvas.Font.Color:=clMaroon;
DBGrid1.DefaultDrawColumnCell
(Rect, DataCol, Column, State);
end;

Ovim programskim kodom ćemo obojiti bojom „clMaroon“ svaki podatak plata zaposlenih (salary), ukoliko ta plata prelazi vrednost 20.000. U narednom primeru videćemo kako možemo izmeniti boju pozadine ćelije određene kolone:


procedure TForm1.DBGrid1DrawColumnCell
(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Table1.FieldByName(‘Salary’).AsCurrency>200000 then
begin
DBGrid1.Canvas.Font.Color:=clWhite;
DBGrid1.Canvas.Brush.Color:=clBlack;
end;
if DataCol = 4 then
DBGrid1.DefaultDrawColumnCell
(Rect, DataCol, Column, State);
end;

Upošljavanjem ovog programskog koda, ćelija koja sadrži podatake o plati obojiće se u crno, a tekst u belu boju ukoliko podatak o plati zaposlenog prelazi 20.000.

Pratite Krstaricu na www.krstarica.com