Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DBGrid1 färben (https://www.delphipraxis.net/160040-dbgrid1-faerben.html)

Alterauge 25. Apr 2011 12:50

Datenbank: Firebird • Version: ?? • Zugriff über: IBCConnection

DBGrid1 färben
 
procedure TForm1.FormCreate(Sender: TObject);
begin
??????????????????????????????????????????????
end;

habe eine DBGrid,
sagen wir in der zweiten spalte ist die Zeile (Status) Status 1, oder 2 oder 3 oder 4 oder 5 oder 6 oder 7.

wenn status 1 aktiv ist, soll sich die Zeile gelb färben
bei 3 rot
bei 6 hellgrün
bei 7 grün

wie mache ich das am besten?

mkinzler 25. Apr 2011 12:58

AW: DBGrid1 färben
 
Dafü musst du einen Ownerdraw implementieren (OnDrawColumnCell). Diese Methode wird dann bei jeder Zelle aufgerufen.

Alterauge 25. Apr 2011 13:32

AW: DBGrid1 färben
 
Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var
  aValue: string;
begin
if Column.Index = 2 then begin {nummer der spalte im dbgrid}
    aValue:= Column.Field.asString; {suchbegriff auslesen}
    if aValue = 'Erfasst' then begin
      DBGrid1.Canvas.Brush.Color := clred;
end;
end;
end;
geht nicht ? was ist falsch

mkinzler 25. Apr 2011 13:36

AW: DBGrid1 färben
 
Was bedeutet geht nicht?
http://delphi.about.com/od/vclusing/l/aa072203a.htm

Alterauge 25. Apr 2011 13:42

AW: DBGrid1 färben
 
die zeile färb sich nicht ein !

wenn in der spalte 3 = der wert Erfasst steht!
dann soll sich die zeile färben!

fkerber 25. Apr 2011 13:48

AW: DBGrid1 färben
 
Hi,

hast du ownerdraw auf True stehen?


LG, Frederic

Alterauge 25. Apr 2011 14:12

AW: DBGrid1 färben
 
hey ???

wo stelle ich das ein ? finde nix?
Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var
  aValue: string;
begin
if Column.Index = 2 then begin {nummer der spalte im dbgrid}
    aValue:= Column.Field.asString; {suchbegriff auslesen}
    if aValue = 'Erfasst' then begin
      DBGrid1.Canvas.Brush.Color := clred;
end;
end;
end;

Alterauge 25. Apr 2011 14:43

AW: DBGrid1 färben
 
hier ! habe selber eine lösung gefunden!

Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var
  aValue: string;
begin
if Column.Index = 1 then begin {nummer der spalte im dbgrid}
    aValue:= Column.Field.asString; {suchbegriff auslesen}
    if aValue = 'Erfasst' then begin
      DBGrid1.Canvas.Brush.Color := clYellow;
      DBGrid1.Canvas.Font.Color := clblack
    end else begin
      DBGrid1.Canvas.Brush.Color := clWhite;
      DBGrid1.Canvas.Font.Color := clblack
    end;
  DBGRid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;

Alterauge 29. Apr 2011 11:20

AW: DBGrid1 färben
 
Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var
  aValue: string;
begin
if Column.Index = 1 then begin {nummer der spalte im dbgrid}
    aValue:= Column.Field.asString; {suchbegriff auslesen}
    if aValue = 'Erfasst' then begin
      DBGrid1.Canvas.Brush.Color := clYellow;
      DBGrid1.Canvas.Font.Color := clred
    end else begin
      DBGrid1.Canvas.Brush.Color := clWhite;
      DBGrid1.Canvas.Font.Color := clblack
    end;
  DBGRid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;

end.
wie bekomme ich das hin, dass die ganze zeile gelb gefärbt wird?

delphi 5

DeddyH 29. Apr 2011 11:26

AW: DBGrid1 färben
 
Indem Du nicht den Column-Index abfragst, sondern direkt den Feldwert des aktuellen Datensatzes?

[edit]
Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if DBGrid1.Datasource.Dataset.FieldByName(Feldname) = 'Erfasst' then begin
    DBGrid1.Canvas.Brush.Color := clYellow;
    DBGrid1.Canvas.Font.Color := clred
  end else begin
    DBGrid1.Canvas.Brush.Color := clWhite;
    DBGrid1.Canvas.Font.Color := clblack
  end;
  DBGRid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

end.
Ungetestet, sollte aber im Groben so funktionieren.[/edit]

mkinzler 29. Apr 2011 11:33

AW: DBGrid1 färben
 
Den dieser Callback wird ja für jede Zelle aufgerufen un du überprüft/zeichnest nur bei Zellen einer Spalte

Alterauge 29. Apr 2011 12:44

AW: DBGrid1 färben
 
Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if DBGrid1.DataSource.DataSet.FieldByName('STATUS').Value = 'Erfasst' then begin
    DBGrid1.Canvas.Brush.Color := clYellow;
    DBGrid1.Canvas.Font.Color := clred
  end else begin
    DBGrid1.Canvas.Brush.Color := clWhite;
    DBGrid1.Canvas.Font.Color := clblack
  end;
  DBGRid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
so geht es ! Danke !

wie gehe ich weiter vor, wenn ein zweiter wert 'beendet ' in grün angezeigt werden soll?

DeddyH 29. Apr 2011 12:48

AW: DBGrid1 färben
 
Einfach eine else if-Bedingung dazwischensetzen. In dem Fall sollte man die Zwischenavariable aber wohl besser wieder einführen, die ich weggekürzt hatte.
Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var Wert: string;
begin
  Wert := DBGrid1.DataSource.DataSet.FieldByName('STATUS').Value;
  if Wert = 'Erfasst' then begin
    DBGrid1.Canvas.Brush.Color := clYellow;
    DBGrid1.Canvas.Font.Color := clred;
  end else if Wert = 'beendet' then begin
    DBGrid1.Canvas.Brush.Color := clWhite;
    DBGrid1.Canvas.Font.Color := clGreen;
  end else begin
    DBGrid1.Canvas.Brush.Color := clWhite;
    DBGrid1.Canvas.Font.Color := clblack;
  end;
  DBGRid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz