Beim Zeichnen der Daten müsste das Grid doch eigentlich immer erstmal von oben nach unten durch die Datenmenge gehen.
Wenn man nun hergeht und im Ereignis AfterOpen (bzw. beim Setzen eines Filters) eine (globale) Stringliste leert und immer dann, wenn eine Zeile gezeichnet wird prüft, ob die aktuelle VorgangsID dort vorhanden ist, müsste doch ungefähr so eine Logik funktionieren:
Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if StringList.IndexOf(VorgangsID) < 0 then StringList.Add(VorgangsID);
Case StringList.IndexOf(VorgangsID) Mod 2 of
0 : DBGrid1.Canvas.Brush.Color := clWhite;
1 : DBGrid1.Canvas.Brush.Color := clInfoBk;
end;
end;