Как заставить TProgressColumn работать при использовании с LiveBindings и наборами данных
Моя цель состоит в том, чтобы иметь 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. Больше информации здесь:
1 ответ
Значение по умолчанию является строкой, а не имеет значения целочисленное поле. В свойстве CustomFormat напишите AsInteger. Значение будет приниматься как целое число, и прогресс теперь виден.