Mejorando código....
Código Delphi
[-]procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
background_colors: array[0..1] of TColor = (clBtnFace, clWhite);
begin
if Dataset.FieldByName('asiento').Value <> UltimoValor then
BoolSwitch := (not BoolSwitch);
TDBGrid(Sender).Canvas.Brush.Color := background_colors[BoolSwitch];
if Pos(Format('-%s-', [Dataset.FieldByName('asiento').Value]), GrupoImpar) > 0 then
TDBGrid(Sender).Canvas.Brush.Color := background_colors[0];
TDBGrid(Sender).DefaultDrawColumnCell( ... );
UltimoValor := Dataset.FieldByName('asiento').Value;
if (not BoolSwitch) and (Pos(Format('-%s-', [Dataset.FieldByName('asiento').Value]), GrupoImpar) = 0) then
GrupoImpar := (GrupoImpar + Format('-%s-', [Dataset.FieldByName('asiento').Value]);
...
end;
Es un gasto de memoria, es cierto. Pero la solución en el código es una simplificación de la solución primera propuesta por delphius.
Aún no funciona? Dinos que esto ya lo tomamos como reto
EDITO: Aclaro que
GrupoImpar es una variable global privada