Announcement

Collapse
No announcement yet.

DBGrid Zeilen der Mastertabelle färben nach Eigenschaft der Detailtabelle

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DBGrid Zeilen der Mastertabelle färben nach Eigenschaft der Detailtabelle

    Hallo,<br>
    ich möchte in einem DBGrid die Zeile eines Datensatzes mit rotem Hintergrund anzeigen, wenn mindestens einer der Detaildatensätze einen kritischen Wert aufweist. Grundsätzlich kann ich das ja über DrawColumnCell erreichen, aber scheinbar nur, wenn ich auf einen Wert in der mit dem Grid verbundenen Tabelle zugreifen kann.<br>
    Die DataSets sind alles TQueries, die Mastertabelle ist read-only, daher kann ich kein berechnetes Feld verwenden (zumindest wird OnCalcFields nie ausgeführt). Auch die SQL-Abfrage lässt sich nicht so formulieren, dass der kritische Wert der Detailtabelle dort bereits erkennbar wäre (es sind vier Felder, deren Kombination erst den kritischen Zustand ausmacht und die nicht über eine Aggregatfunktion ermittelbar sind).<br>
    Ich habe eine Funktion <b>kritisch()</b>, die je nach Zustand der Detaildaten einen Boolean zurückgibt. Ist dieser TRUE, soll die Zeile rot sein, sonst nicht. In dieser Funktion werden alle Detaildatensätz durchlaufen. Dies ist nicht zeitkritisch, da die Mastertabelle selten mehr als 100, die Detailtabelle maximal 4x soviele Sätze enthält.<p>
    Geht das trotzdem irgendwie??
    Gruß,<br>
    Siegbert

  • #2
    Hallo,
    ich verwende für z.B. folgenden Code:

    procedure TfrmAnzeigeZLG.DBGrid1DrawColumnCell(Sender: TObject;
    const Rect: TRect; DataCol: Integer; Column: TColumn;
    State: TGridDrawState);
    begin
    if dm.tbERZLG_CONFIRM.Value <> TRUE then
    begin
    DBGrid1.Canvas.Brush.Color := clAqua;
    DBGrid1.DefaultDrawColumnCell(Rect, Datacol, Column, State);
    end;
    end;

    Sollte also auch für Ihre Situation ralisierbar sein.

    Viele Grüße
    Aloi

    Comment

    Working...
    X