![]() |
einfärben einer zeile eines dbgrids
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 |
Re: einfärben einer zeile eines dbgrids
Hai,
geht ganz einfach ;-)
Delphi-Quellcode:
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.
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; Wenn die Zeile den Fokus besitzt ist sie blau. |
Re: einfärben einer zeile eines dbgrids
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 ?? |
Re: einfärben einer zeile eines dbgrids
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe Sharky's Code noch mal etwas abgeändert damit der den Farbcode aus der SQL Abfrage verwendet (nicht Sharky... der Code :mrgreen: ).
[Gedankenstütze]
SQL-Code:
[/Gedankenstütze]
SELECT Spalte1, Spalte2, 14588515 as 'Farbcode' FROM Table1
UNION ALL SELECT Spalte1, Spalte2, 9816060 as 'Farbcode' FROM Table2
Delphi-Quellcode:
Mit dem Multiselect komme ich auch nicht weiter, da 'gdSelected' nur den AKTUELL selektierten Datensatz kennzeichnet (also fast nichts anderes als dgFocused).
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; 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. :hi: |
Re: einfärben einer zeile eines dbgrids
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 :P ich hatte meins bisher so realisiert :
Delphi-Quellcode:
mfg
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; stoni |
Re: einfärben einer zeile eines dbgrids
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 :/ |
Re: einfärben einer zeile eines dbgrids
Zitat:
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 . . |
Re: einfärben einer zeile eines dbgrids
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 |
Re: einfärben einer zeile eines dbgrids
Hi,
nimm anstatt "gdSelected" -> "gdFocused". Dann wird der aktive Record nur markiert, wenn das Grid den Eingabefocus hat . :hi: |
Re: einfärben einer zeile eines dbgrids
supi - klappt nun auch soweit :D
danke nochmals an alle ( sharky und jensw_2000 ) :D mfg stoni |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 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-2025 by Thomas Breitkreuz