我的目标是拥有一个包含多个列的 TGrid,通过 LiveBindings 连接到 TClientDataSet。其中一列是 TProgressColumn 类型。
网格显示数据,但进度条列不显示任何内容(即 0% 进度)。
TProgressColumn 连接到 ftInteger 类型的字段。此字段中的值介于 0 和 100 之间。
我尝试过使用 ftSingle,但没有运气。我通过 ColumnStyle 属性将列的类型设置为 TProgressColumn,该属性在 TLinkGridToDataSourceBindSourceDB/Columns 下可用。
奇怪的是,当我使用 TPrototypeBindSource 生成值时 - TProgressColumn 有效,但仅适用于 ftUInteger 值。ftInteger 生成器失败。
这是一个小演示(Delphi XE7):
当我在 TProgressCell.DrawCell() 中放置一个断点并跳过 Value.IsOrdinal 和 Value.IsType 的两个条件时,ClampValue 接收到一个值为 0 的“Min”。该值似乎有问题,通过到功能。
使用 TProgressColumn 时有什么特别之处吗?我需要在 TLinkGridToDataSourceColumn 中使用 CustomFormat、CustomParse 吗?
这是一个错误还是我错过了什么?
更新: 感谢“nompa”,谜团解开了!
事实上,“asInteger”是 TField 类的众所周知的属性,即:
someDataSet.fieldByName('myFieldName').asInteger
在 CustomFormat 属性中,您可以访问许多东西,包括 self.asInteger 属性。更多信息在这里: