首页 > 解决方案 > DBGrid 上的行组的替代颜色

问题描述

我想按组交替网格的颜色。我的第一次尝试是向 ClientDataset 添加一个 GroupNumber(使用 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;

它工作得很好,但如果我手动删除一行,那么我可以有两个连续的偶数或奇数组,它们将用相同的颜色绘制。

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

谢谢你。

标签: delphitclientdatasettdbgriddelphi-10.4-sydney

解决方案


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

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

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

小提示:列表中组的顺序必须与组在数据集中出现的顺序一致!


推荐阅读