Ja, ja. Yo no dije que tuviera la solución, simplemente comenté mi renuencia a creer en las ya existentes
Yo opino que el switch no funciona porque el pintado de celdas no necesariamente es secuencial. Sin embargo, esta técnica del switch podría usarse desde la consulta sql. Por ejemplo, en MySQL puedo hacer algo parecido a esto:
Código SQL
[-]
set @asiento=0,@colorear=0;
select asiento, control, fecha, if (@asiento <> asiento, @colorear:=1-@colorear, @colorear) as colorear, @asiento:=asiento
from tabla
order by fecha, asiento, control
La columna "colorear" alterna entre 1 y 0 según cambia el valor del campo asiento, de manera que la condición en el evento DrawColumnCell se reduce a:
Código Delphi
[-]
if DBGrid1.DataSource.DataSet.FieldByName('colorear').AsInteger = 1 then
DBGrid1.Canvas.Brush.Color := clGreen;
Supongo que en Firebird también existen las variables de usuario así que podría hacerse algo similar.
// Saludos