DBGrid i odczyt wartości z komórki

0

Witajcie!
Mam tabelę, w której są tylko wartości Integer (dla uproszczenia). Chcę aby w zależności od wartości liczby w pojedynczej komórce (np. czy liczba jest parzysta czy nie) komórka miała inny kolor. Przejrzałem różne posty i skłaniam się do użycia procedury

PrepareCanvas(sender: TObject; DataCol: Integer; Column: TColumn; AState: TGridDrawState);

ale nie wiem jak odczytać wartość rysowanej komórki (nie koniecznie z zaznaczonego wiersza)
Pewnie to coś prostego, ale jak dotąd nie mogę na to wpaść.

Pomożecie?
Sc0li0sis

1

(sender as tdbgrid).datasource.dataset.fieldbyname('nazwa_pola_ktore_chcesz_odczytac').AsInteger
ewentualnie
(sender as tdbgrid).datasource.dataset.fieldbyname(Column.FieldName).AsInteger

Tylko że PrepareCanvas to nie jest event DBGrida

1
abrakadaber napisał(a):

Tylko że PrepareCanvas to nie jest event DBGrida

W LCL jest — TCustomDBGrid.OnPrepareCanvas typu TPrepareDbGridCanvasEvent.

1

Musisz oprogramować zdarzenie onDrawColumnCell

procedure Tmain_form.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Grid: tdbgrid;
begin
  Grid := tdbgrid(Sender);
  if Column.Field.FieldName = 'myint' then
    if (Column.Field.AsInteger mod 2) = 0 then
      Grid.Canvas.Brush.Color := clRed
    else
      Grid.Canvas.brush.Color := clGreen;
  Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Dla nielubiących if'ów...

procedure Tmain_form.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Grid: tdbgrid;
const
  colors: array [0 .. 1] of TColor = (clRed, clGreen);
begin
  Grid := tdbgrid(Sender);
  if Column.Field.FieldName = 'myint' then
    Grid.Canvas.Brush.Color := colors[Column.Field.AsInteger mod 2];
  Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Pisane bez testowania

1 użytkowników online, w tym zalogowanych: 0, gości: 1