2014-09-08 4 views
3

Mon but est d'avoir un TGrid avec plusieurs colonnes, connecté à un TClientDataSet via LiveBindings. L'une des colonnes est de type TProgressColumn.Comment faire fonctionner TProgressColumn lorsqu'il est utilisé avec LiveBindings et les ensembles de données

La grille affiche les données, mais la colonne de barre de progression ne montre rien (c'est-à-dire, une progression de 0%).

TProgressColumn est connecté à un champ de type ftInteger. Les valeurs dans ce champ sont entre 0 et 100.

J'ai essayé avec ftSingle, mais sans chance. Je définis le type de la colonne à TProgressColumn via la propriété ColumnStyle, disponible sous TLinkGridToDataSourceBindSourceDB/Columns.

La chose étrange est que lorsque j'utilise TPrototypeBindSource pour générer des valeurs - le TProgressColumn fonctionne, mais seulement pour les valeurs de ftUInteger. Il échoue pour les générateurs ftInteger.

Voici une petite démo (Delphi XE7):

TProgressColumn issues

Quand je mets un point d'arrêt dans TProgressCell.DrawCell() et l'étape sur les deux conditions pour Value.IsOrdinal et Value.IsType sont sautées et ClampValue reçoit une valeur "Min" qui vaut 0. Il semble y avoir un problème avec la valeur, passée à la fonction.

Y at-il quelque chose de spécial lorsque vous travaillez avec TProgressColumn? Dois-je utiliser CustomFormat, CustomParse dans TLinkGridToDataSourceColumn?

Est-ce un bug ou quelque chose me manque?

MISE À JOUR: Grâce à "nompa" le mystère a été résolu!

En fait "AsInteger" est la propriété bien connue de la classe TField i.e. .:

someDataSet.fieldByName('myFieldName').asInteger 

TProgressColumn - SOLVED!

Dans la propriété CustomFormat vous pouvez avoir accès à beaucoup de choses, y compris les propriétés de self.asInteger. Plus d'informations ici:

  1. Using Custom Format and Parse Expressions in LiveBindings
  2. Using binding expressions in the CustomFormat property of a TLinkPropertyToField component
  3. Formatting your Fields
  4. How to treat an Integer field as a Boolean?

Répondre

2

La valeur est une chaîne par défaut, peu importe est un champ entier. Dans la propriété CustomFormat, écrivez AsInteger. La valeur sera prise en entier et la progression sera visible.

+0

G-R-E-A-T !!! Ca marche :) Il m'a fallu du temps pour deviner ce qu'AsInteger est ... (: –

Questions connexes