Как заставить 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() и перехожу через два условия для Value.IsOrdinal и Value.IsType, они пропускаются, а ClampValue получает значение «Min», равное 0. Кажется, что-то не так со значением, переданным к функции.

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

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

ОБНОВЛЕНИЕ: благодаря "nompa" тайна была раскрыта!

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

someDataSet.fieldByName('myFieldName').asInteger

TProgressColumn - РЕШЕНО!

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

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

person iPath ツ    schedule 08.09.2014    source источник


Ответы (1)


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

person nompa    schedule 09.09.2014