AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

einfärben einer zeile eines dbgrids

Ein Thema von stonimahoni · begonnen am 11. Jan 2005 · letzter Beitrag vom 14. Jan 2005
Antwort Antwort
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#1

einfärben einer zeile eines dbgrids

  Alt 11. Jan 2005, 09:11
hi leute

kann ich ein bdgrid dahingehend überprüfen, dass wenn ein feld in einer spalte nicht leer ist, dann würde ich gerne die ganze ZEILE in der sich dieses feld befindet in einer bestimmten farbe darstellen.

ist das möglich ? weil ich wüsste atm nicht wie ich das umsetze



thx
Carsten
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: einfärben einer zeile eines dbgrids

  Alt 11. Jan 2005, 09:15
Hai,

geht ganz einfach

Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with (Sender as TDBGrid) do
  begin
    if (gdSelected in State) then
    begin
      Canvas.Brush.Color := clblue; //Farbe für die Zelle mit dem Focus
    end
    else
    begin
      if (DataSource.DataSet.FieldByName('tag').AsInteger < 0) then
      begin
        Canvas.Brush.Color := clRed;
      end
      else
      begin
        Canvas.Brush.Color := clGreen;
      end;
    end;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, Column.Field.AsString); //Denn Text in der Zelle ausgeben
  end;
end;
Dieser Code färbt im DBGrid jede Zeile rot wenn in dem Datensatz das Feld "tag" kleiner 0 ist. Ansonsten ist die Zeile grün.
Wenn die Zeile den Fokus besitzt ist sie blau.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#3

Re: einfärben einer zeile eines dbgrids

  Alt 11. Jan 2005, 09:38
danke vielmals sharky

hat bestens funktioniert

bis dann

mfg

stoni

zusatz :
das mit der rot markierten zeile hab ich jetzt probiert mit einzubauen allerdings wird bei deinem code nur die erste zelle dann rot markiert und auch nur eine nicht mehrere bei multiselect

wie kann ich denn realisieren dass bei multiselect mehrere ( die ausgewählten ) zeilen komplett markiert werden ??
Carsten
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: einfärben einer zeile eines dbgrids

  Alt 11. Jan 2005, 21:59
Ich habe Sharky's Code noch mal etwas abgeändert damit der den Farbcode aus der SQL Abfrage verwendet (nicht Sharky... der Code ).

[Gedankenstütze]
SQL-Code:
SELECT Spalte1, Spalte2, 14588515 as 'FarbcodeFROM Table1
UNION ALL
SELECT Spalte1, Spalte2, 9816060 as 'FarbcodeFROM Table2
[/Gedankenstütze]

Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with (Sender as TDBGrid) do
  begin

    // prüfen ob in der Wert im Feld Farbcode <>NULL ist
    // Wenn ja, dann Farbe wählen. Wenn nicht, dann weiß.
    // Die Prüfung ist bei dem o.a. SQL Befehl nicht unbedingt notwendig, da Farbcode nie NULL werden kann
    // aber falls man mal auf reale Spalten zurückgreift muss er rein ...

    if DataSource.DataSet.FieldByName('Farbcode').AsVariant<>NULL then
    begin
      Canvas.Brush.Color := DataSource.DataSet.FieldByName('Farbcode').AsInteger; // << hier an deine Query anpassen ...
    end
    else begin
      Canvas.Brush.Color := clWhite;
    end;
     
    // Bei selektierten Feldern die Farbe nochmal ändern
    if (gdSelected in state) then
    begin
      Canvas.Brush.Color := clHighlight; //Farbe für die Zelle mit dem Focus
    end;
    // Zeichnen
    Canvas.FillRect(Rect); //Hintergrundfarbe zeichnen
    Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, Column.Field.AsString); //Den Text in der Zelle ausgeben
  end;
end;
Mit dem Multiselect komme ich auch nicht weiter, da 'gdSelected' nur den AKTUELL selektierten Datensatz kennzeichnet (also fast nichts anderes als dgFocused).

Habe dir mal nen Screenshot von meinem Test mit rangehängt ...

Eventuell ist es ja das, was du suchst ...

Ich habe 3 Tabellen via UNION ALL in einer Abfrage zusammengefasst und in jedem SELECT virtuelle Spalte 'Farbcode' mit einem induviduellen Integerwert hinzugefügt.


Miniaturansicht angehängter Grafiken
dbgrid_168.gif  
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#5

Re: einfärben einer zeile eines dbgrids

  Alt 13. Jan 2005, 07:31
hallo und guten morgen

@ jensw_2000 :
danke für deine antwort aber das bringt mich nicht wirklich weiter
so habe ich das auch schon hinbekommen - auch wenn ich das mit der farbzuweisung ez nicht unbedingt schon bei der select abfragte mache

aber wie gesagt : bei multiselect klappt das noch nicht so und vor allem möchte ich die ganze zeile dann andersfarbig haben und wenns geht auch dann vielleicht - je nach farbe bei auswahl - die schrift nicht in weiss sondern schwarz oder so haben.

werde mal weiter ausprobieren aber bin für vorschläge jeder art offen


ich hatte meins bisher so realisiert :

Delphi-Quellcode:
   with (Sender as TDBGrid) do
   begin
     //if (gdSelected in State) then
     //begin
     // Canvas.Brush.Color := clred; // Farbe für die Zelle mit dem Focus
     //end
     //else
     //begin
      if doubleclick = false then
      begin
         // Mahnung an Kunde
         if (DataSourceAuftrStat.DataSet.FieldByName('Rep_zurueck_datum').Value <> NULL) then
         begin
           Canvas.Brush.Color := clYellow;
         end;
         // zweite KD Mahnung
         if (DataSourceAuftrStat.DataSet.FieldByName('Rep_zurueck_datum').Value = NULL) and (DataSourceAuftrStat.DataSet.FieldByName('Kudienst_mahn1').Value <> NULL) then
         begin
            Canvas.Brush.Color := clSkyBlue;
         end;
         // erste KD Mahnung
         if (DataSourceAuftrStat.DataSet.FieldByName('Rep_zurueck_datum').Value = NULL) and (DataSourceAuftrStat.DataSet.FieldByName('Kudienst_mahn1').Value = NULL)then
         begin
           Canvas.Brush.Color := clMoneyGreen;
         end;
      end;
      Canvas.FillRect(Rect); //Hintergrundfarbe zeichnen
      Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, Column.Field.AsString); //Den Text in der Zelle ausgeben
      DBGridAuftrStatListe.Enabled := true;
     end;
mfg

stoni
Carsten
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#6

Re: einfärben einer zeile eines dbgrids

  Alt 14. Jan 2005, 08:32
weiss keiner nen rat wie das für multiselect und markieren der ganzen zeile geht ?
hab mich da schon durch die ganze delphi praxis suche gelesen aber nichts wirklich passendes gefunden :/
Carsten
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: einfärben einer zeile eines dbgrids

  Alt 14. Jan 2005, 08:39
Zitat von stonimahoni:
weiss keiner nen rat wie das für multiselect und markieren der ganzen zeile geht ? ...
Hai,
ergänze meinen Code mal so:
Delphi-Quellcode:
begin
.
.
    if (gdSelected in State) or (SelectedRows.CurrentRowSelected) then // Zeile hat den Fokus oder ist markiert
    begin
      Canvas.Brush.Color := clblue; //Farbe für die Zelle mit dem Focus
    end
.
.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#8

Re: einfärben einer zeile eines dbgrids

  Alt 14. Jan 2005, 15:20
supi
das hat einwandfrei geklappt sharky - danke danke

jetzt is noch das kleien problemchen, dass die erste zeile im dbgrid immer automatisch markiert wird und in deinem bsp dann automatisch blau ist wenn dgalwaysshowselection auf true steht.
steht das auf false sollte die zeile EIGENTLICH die farbe haben, die ich ihr duch den select zugewiesen habe, ABER : sie ist nun komplett weiss ?!

kann ich das so einstellen, dass wenn ich das programm starte, KEINE zeile markiert ist - also bis ich von mir aus eine selectiere/anwähle ?

danke für die hilfe
mfg

stoni
Carsten
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#9

Re: einfärben einer zeile eines dbgrids

  Alt 14. Jan 2005, 15:42
Hi,

nimm anstatt "gdSelected" -> "gdFocused".
Dann wird der aktive Record nur markiert, wenn das Grid den Eingabefocus hat .



  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#10

Re: einfärben einer zeile eines dbgrids

  Alt 14. Jan 2005, 16:17
supi - klappt nun auch soweit



danke nochmals an alle ( sharky und jensw_2000 )


mfg

stoni
Carsten
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 Uhr.
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