Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DBGrid formatieren - Abhängig vom Inhalt (https://www.delphipraxis.net/115379-dbgrid-formatieren-abhaengig-vom-inhalt.html)

d6lpz 11. Jun 2008 10:59


DBGrid formatieren - Abhängig vom Inhalt
 
Hallo,

ich suche nach einer Möglichkeit die Zellen eines DBGrids entsprechend des Inhaltes zu formatieren.

Damit habe ich die aktuelle Zelle beeinflussen können:
Delphi-Quellcode:
procedure TMain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
        dbgrid1.Canvas.Brush.Color :=clgreen;
end;
Damit habe ich das komplette Grid eingefärbt:
Delphi-Quellcode:
        dbgrid1.Color:=clRed;
Was ich will ist in etwa sowas:
Delphi-Quellcode:
if (Field.AsString = 'R')then
begin
Background := clRed;
end
Hat jemand einen Tip für mich?
Oder geht das vielleicht mit der Standard DBGridKomponente garnicht??

Dirk

mkinzler 11. Jun 2008 11:05

Re: DBGrid formatieren - Abhängig vom Inhalt
 
Du müsst dafür sorgen, dass die Farbe wieder zurückgesetzt wird

ADelf 11. Jun 2008 11:13

Re: DBGrid formatieren - Abhängig vom Inhalt
 
Hallo,

also ich mache das etwa so:

Delphi-Quellcode:
TForm.DBGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);

begin
  With DBGrid do
   case Datasource.DataSet.FieldByName('STATUS').Value of
    1 :
       begin
        Canvas.Brush.Color:=clRed;
        DefaultDrawColumnCell(Rect,DataCol,Column,State);
       end;
    2 :
       begin
        Canvas.Brush.Color:=clLime;
        DefaultDrawColumnCell(Rect,DataCol,Column,State);
       end;
    3 :
       begin
        Canvas.Brush.Color:=clBlue;                
        DefaultDrawColumnCell(Rect,DataCol,Column,State);
       end;
   end;
end;
Ich frage quasi bei jeder Zelle, welchen Wert das Feld hat, nach dem ich mich bei der Formatierung richten will.

Grüße

d6lpz 11. Jun 2008 12:30

Re: DBGrid formatieren - Abhängig vom Inhalt
 
Hallo,
vielen Dank für deine Hinweise, die haben mir schon ein Stück weiter geholfen - allerdings funktioniert es noch nicht ganz richtig.
Ich habe jetzt folgendes:
Delphi-Quellcode:
procedure TMain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin

        With DBGrid1 do
                if DataModule1.CrossQry_Month.FieldByName('1').Value = 'H' then
                begin
                        Canvas.Brush.Color:=clRed;
                        DefaultDrawColumnCell(Rect,DataCol,Column,State);
                end
                else if DataModule1.CrossQry_Month.FieldByName('1').Value = 'W' then
                begin
                        Canvas.Brush.Color:=clBlue;
                        DefaultDrawColumnCell(Rect,DataCol,Column,State);

                end
end;
Ergebnis sind eingefärbte Zeilen und nicht Zellen.
PS: Die Spalte hat die Bezeichnung '1' ( 1 steht für den ersten Tag des Monats usw.)

So komme ich noch nicht zum Ziel...

Hast du noch einen Tip?

Dirk

mkinzler 11. Jun 2008 12:32

Re: DBGrid formatieren - Abhängig vom Inhalt
 
Überprüfe noch die Column.

d6lpz 11. Jun 2008 12:52

Re: DBGrid formatieren - Abhängig vom Inhalt
 
Zitat:

Zitat von mkinzler
Überprüfe noch die Column.

Wie meinst du das?

Ich kann zwar mit
Delphi-Quellcode:
dbgrid1.Columns.Items[i]
eine Spalte auswählen aber wie soll ich abfragen welche Zelle gerade überprüft wird :gruebel:
Ich habe mal wieder ein 40er Brett vorm Kopf...

Dirk

mkinzler 11. Jun 2008 13:01

Re: DBGrid formatieren - Abhängig vom Inhalt
 
Da der CallBack für jede Zelle aufgerufen wird, wirkt er auch für alle Spalten einer Zeile. Die aktuelle Spalte wird als Parameter übergeben

d6lpz 11. Jun 2008 13:11

Re: DBGrid formatieren - Abhängig vom Inhalt
 
Zitat:

Zitat von mkinzler
Da der CallBack für jede Zelle aufgerufen wird, wirkt er auch für alle Spalten einer Zeile. Die aktuelle Spalte wird als Parameter übergeben

Schade aber der Hinweis hilft mir nicht wirklich.
Ich komme hier heute nicht mehr weiter.

Dirk

DeddyH 11. Jun 2008 13:15

Re: DBGrid formatieren - Abhängig vom Inhalt
 
Überprüfe noch z.B. mit Column.FieldName, ob es auch die Spalte des entsprechenden Feldes ist.

d6lpz 11. Jun 2008 13:36

Re: DBGrid formatieren - Abhängig vom Inhalt
 
Zitat:

Zitat von DeddyH
Überprüfe noch z.B. mit Column.FieldName, ob es auch die Spalte des entsprechenden Feldes ist.

Ihr wollt das ich allein darauf komme - okay habe ich verstanden.

Vielleicht kann mir mal irgendjemand das Brett wegschlagen und in meinem Code (siehe oben) reinschreiben wie das gemeint ist mit dem Column.FieldName.

Ich habe doch schon die Spalte abgefragt mit FieldByName='1'.

Ich werde mit mir langsam ungeduldig und ohrfeige mich gleich selber :wall: :wall:

Bytheway - die Delphi Hilfe ist absolut fürn Po! Wenn man mal ein Beispiel der Verwendung (Codeschnipsel) finden würde, wäre man oftmals weiter. Da kann sich Delphi, CodeGear oder wie auch immer, ne Scheibe von Microsoft abschneiden!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.
Seite 1 von 2  1 2      

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