Как заставить TProgressColumn работать при использовании с LiveBindings и наборами данных


Моя цель-иметь TGrid с несколькими столбцами, подключенными к TClientDataSet через LiveBindings. Один из столбцов имеет тип TProgressColumn.

Таблица отображает данные, но столбец индикатор выполнения не показывает ничего (т. е. 0% прогресса).

Столбец TProgressColumn связан с полем типа ftInteger. Значения в этом поле находятся в диапазоне от 0 до 100.

Я пробовал с ftSingle, но безуспешно. Я установил тип столбца, чтобы быть TProgressColumn через Свойство ColumnStyle, доступное в разделе TLinkGridToDataSourceBindSourceDb / Columns.

Странно то, что когда я использую TPrototypeBindSource для генерации значений - TProgressColumn работает, но только для значений ftUInteger. Он не работает для генераторов ftInteger.

Вот небольшая демонстрация (Delphi XE7):

Проблемы с колонкой TProgressColumn

Когда я ставлю точку останова в TProgressCell.DrawCell () и перейти через два условия для значения.Изординал и ценность.IsType пропускаются и ClampValue получает значение "Min", равное 0. Кажется, что-то не так со значением, переданным функции.

Есть ли что-то особенное при работе с TProgressColumn? Нужно ли использовать CustomFormat, CustomParse в TLinkGridToDataSourceColumn?

Это ошибка или я что-то пропустил?

Обновление: Благодаря "nompa" тайна была решена!

На самом деле "asInteger" - это хорошо известное свойство класса TField, т. е.:

someDataSet.fieldByName('myFieldName').asInteger

TProgressColumn-решено!

В Свойство CustomFormat вы можете получить доступ ко многим вещам, в том числе и к себе.свойства asInteger. Более подробная информация здесь:

  1. использование пользовательского формата и синтаксического анализа выражений в LiveBindings
  2. использование выражений привязки в свойстве CustomFormat компонента TLinkPropertyToField
  3. форматирование полей
  4. Как относиться к целочисленному полю как к логическому?
1 4

1 ответ:

Значение по умолчанию является строкой, а не материя-целочисленным полем. В свойстве CustomFormat напишите AsInteger. Значение будет приниматься как целое число, и прогресс теперь виден.