Einzelnen Beitrag anzeigen

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