Моя цель — иметь TGrid с несколькими столбцами, подключенный к TClientDataSet через LiveBindings. Один из столбцов имеет тип TProgressColumn.
В сетке отображаются данные, но столбец индикатора выполнения ничего не показывает (т.е. 0% прогресса).
TProgressColumn подключен к полю типа ftInteger. Значения в этом поле находятся в диапазоне от 0 до 100.
Я пытался с ftSingle, но безуспешно. Я установил тип столбца TProgressColumn через свойство ColumnStyle, доступное в TLinkGridToDataSourceBindSourceDB/Columns.
Странно то, что когда я использую TPrototypeBindSource для генерации значений — TProgressColumn работает, но только для значений ftUInteger. Это не работает для генераторов ftInteger.
Вот небольшая демонстрация (Delphi XE7):
Когда я ставлю точку останова в TProgressCell.DrawCell() и перехожу через два условия для Value.IsOrdinal и Value.IsType, они пропускаются, а ClampValue получает значение «Min», равное 0. Кажется, что-то не так со значением, переданным к функции.
Есть ли что-то особенное при работе с TProgressColumn? Нужно ли использовать CustomFormat, CustomParse в TLinkGridToDataSourceColumn?
Это баг или я что-то пропустил?
ОБНОВЛЕНИЕ: благодаря "nompa" тайна была раскрыта!
На самом деле asInteger — это хорошо известное свойство класса TField, т.е.:
someDataSet.fieldByName('myFieldName').asInteger
В свойстве CustomFormat вы можете получить доступ ко многим вещам, включая свойства self.asInteger. Больше информации здесь: