delphi - 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;
它工作得很好,但如果我手动删除一行,那么我可以有两个连续的偶数或奇数组,它们将用相同的颜色绘制。
有没有更好的方法来检查当前记录是否开始一个新组?
谢谢你。
解决方案
您想要的没有“神奇”功能:当列表按该字段值/组排序时,使用基于某个字段值(又名组)的替代颜色。
但是您可以制作自己的组列表(基于数据集内容),然后使用该列表中组索引的偶数/奇数规范来获取颜色。
当您删除行时,请检查它是否是该组的最后一行,然后从列表中删除该组。反之,当记录与新组一起添加时,将新组添加到组列表中。
小提示:列表中组的顺序必须与组在数据集中出现的顺序一致!
推荐阅读
- python - 两个看似相同的 if 语句之间的区别
- python-3.x - 生成元素平方和等于给定值的数组
- vb.net - 如何在 vb.net 中将对象转换为字符串数组?
- javascript - R DT:数据表删除 .no-footer 边框底部
- pdf - 读取 MS Office 生成的 PDF 文件时出错
- c# - 在独立的 .NET Core DLL 中,如何从 appsettings.json 配置文件中获取值?
- android - 有没有办法在 Android 中使用 MSAL 库连接 Azure B2C
- postman - D365FO 更新记录的补丁方法
- c++ - 从 QList 中删除和重新分配指针