Как заставить 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. Как рассматривать поле Integer как логическое значение?

1 ответ

Решение

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

Другие вопросы по тегам