Newsgroup: it.comp.lang.delphi
Titolo: colorare righe in dbgrid

Si possono colorare le righe di una dbgrid corrispondenti
ad un valore true in un campo booleano, di una tabella
collegata a tale griglia??'?
Grazie

Si.
Ci sono 2 modi...
1) creare una tua classe dbgrid che redita dalla TDbgrid standard di delphi
e ridefinire alcuni metodi relativi al disegno della griglia
2) usare l'evento OnDrawColumnCell dopo aver impostato la prop
DefaultDrawing a False.
Bye
A.

 ha scritto nel messaggio
news:b0j3re$29f0$1...@newsreader1.mclink.it...


 come faccio a decidere di colorare una riga???
in base a una condizione IF stabilita da te..


Grazie mille sembra funzionare, solo che mi colora solo la cella,
come faccio a fargli colorare tutto il rigo???
Ciao.

Lui passa per questo evento per ogni cella da disegnare.
Non per ogni "riga", ma proprio x ogni cella.
Quindi se hai 10 righe x 20 colonne lui passa di qui 200 volte, ok?
Quindi, il principio č:
non me ne frega niente di quale colonna č.
se per quel record il valore di quel particolare campo č x, voglio tutta la
riga in rosso
se per quel record il valore di quel particolare campo č y, voglio tutta la
riga in blu
Ora, leggi il codice che ti ho postato...
Trovi sia conforme a cio che ti serve?
Vedi che esiste un punto preciso nel quale devi intervenire?
Un piccolo sforzo e ci arrivi di sicuro..
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:
TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  holdColor: TColor;
begin
  holdColor := DBGrid1.Canvas.Brush.Color; {store the original color}
  if Column.FieldName = 'EmpNo' then {only do for the cell displaying
EmpNo}
    if (Column.Field.AsInteger mod 2 <> 0) then begin
      DBGrid1.Canvas.Brush.Color := clGreen;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      DBGrid1.Canvas.Brush.Color := holdColor;
    end;
end;
Bye
A.

ci sono riuscito facendo in questo modo:
  if DataMod.TAgenti.FieldByName('NonAttivo').AsBoolean = True
    then GridAgenti.Canvas.Brush.Color := clRed   //colore righe non attive
    else GridAgenti.Canvas.Brush.Color := clWhite;  //colore righe attive
  GridAgenti.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  GridAgenti.Canvas.Brush.Color := clblue;
Grazie mille :)))))))

Tutti questi metodi sovrascrivono anche il colore della selezione
e non mi permettono + di vederlo, come posso fare???



Grande!
Ma si può scrivere la stessa cosa in modo, imho, + leggibile:
var
  ColoreRiga:  TColor;
With TDbgrid(Sender) do begin
     if Datasource.Dataset.FieldByName('NonATtivo').AsBoolean then
       ColoreRiga := clRed
     else
       ColoreRiga := clWhite;
     DefaultDrawColumnCell(Rect, DataCol, Column, State);
     Canvas.Brush.Color := clblue;
end;
Bye
A.

A parte il with, trovo più leggibile la mia, solo che qui sembra
strana perchè i caratteri non sono a spaziatura fissa, e poi si
sa il modo di impaginare e organizzare il codice è personale...


 e non mi permettono + di vederlo, come posso fare???
Ma poi hai risolto questo problema?
Grazie in anticipo!
RLB
--------------------------------
Inviato via 
http://usenet.libero.it

 Ma poi hai risolto questo problema?
Ho RISOLTO !!!!!!!!!!!!!!!!
