DBGrid 上的行组的替代颜色

问题描述

我想按组交替我的网格的颜色。我的第一次尝试是将 GroupNumber 添加到 ClientDataset(使用 sql Server 的 DENSE_RANK() 函数)。

select dense_rank() over (order by Viatge) as GroupNumber,Transports_v.* 
from Transports_v
where IdTransportista = :Id
order by 1

现在我可以使用以下代码在网格上交替颜色:

procedure TFFacturesTransportista.AEDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if Odd(QAlbaransPEndentsGroupNumber.Value) then AEDBGrid1.Canvas.Brush.Color := clInfoBk;

  AEDBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,state);
end;

效果很好,但是如果我手动删除一行,那么我可以有两个连续的偶数组或奇数组,并且它们会以相同的颜色绘制。

有没有更好的方法来检查当前记录是否开始了一个新组?.

谢谢。

解决方法

没有您想要的“魔法”功能:当列表按该字段值/组排序时,根据某个字段值(又名组)使用替代颜色。

但是您可以创建自己的组列表(基于数据集内容),然后使用该列表中组索引的偶数/奇数规范来获取颜色。

删除行时,请检查它是否是该组的最后一行,然后从列表中删除该组。 反过来,当一条记录添加到新组时,将新组添加到组列表中。

小注意:列表中组的顺序必须与组在数据集中出现的顺序相同!