4

我的目标是拥有一个包含多个列的 TGrid,通过 LiveBindings 连接到 TClientDataSet。其中一列是 TProgressColumn 类型。

网格显示数据,但进度条列不显示任何内容(即 0% 进度)。

TProgressColumn 连接到 ftInteger 类型的字段。此字段中的值介于 0 和 100 之间。

我尝试过使用 ftSingle,但没有运气。我通过 ColumnStyle 属性将列的类型设置为 TProgressColumn,该属性在 TLinkGridToDataSourceBindSourceDB/Columns 下可用。

奇怪的是,当我使用 TPrototypeBindSource 生成值时 - TProgressColumn 有效,但仅适用于 ftUInteger 值。ftInteger 生成器失败。

这是一个小演示(Delphi XE7):

TProgressColumn 问题

当我在 TProgressCell.DrawCell() 中放置一个断点并跳过 Value.IsOrdinal 和 Value.IsType 的两个条件时,ClampValue 接收到一个值为 0 的“Min”。该值似乎有问题,通过到功能。

使用 TProgressColumn 时有什么特别之处吗?我需要在 TLinkGridToDataSourceColumn 中使用 CustomFormat、CustomParse 吗?

这是一个错误还是我错过了什么?

更新: 感谢“nompa”,谜团解开了!

事实上,“asInteger”是 TField 类的众所周知的属性,即:

someDataSet.fieldByName('myFieldName').asInteger

TProgressColumn - 已解决!

在 CustomFormat 属性中,您可以访问许多东西,包括 self.asInteger 属性。更多信息在这里:

  1. 在 LiveBindings 中使用自定义格式和解析表达式
  2. 在 TLinkPropertyToField 组件的 CustomFormat 属性中使用绑定表达式
  3. 格式化你的字段
  4. 如何将整数字段视为布尔值?
4

1 回答 1

2

默认值是字符串,不管是整数字段。在属性 CustomFormat 中写入 AsInteger。该值将被视为整数,现在进度是可见的。

于 2014-09-09T13:48:53.553 回答