Question

Je suis en train d'écrire un contrôle de grille qui affiche le contenu soit d'une TDataSet ou TObjectList. Lorsque vous avez seulement besoin de soutien TDataSet, les choses sont assez simples:

  1. Lien vers l'ensemble de données via un TDataLink descendant.
  2. Lorsque vous peignez le contenu de la grille, vous pouvez utiliser les enregistrements tamponnés dans ce TDataLink pour peindre ce que vous devez.
  3. Il n'y a pas besoin d'avoir des objets individuels quelque part pour représenter les lignes de la TDataSet, parce que vous toujours juste peindre les lignes dans la mémoire tampon.

Dans mon cas, je dois accepter les données de quelques autres sources aussi bien, ce qui signifie que je devais avoir un objet représentant chaque ligne (aussi parce que le contrôle requis un peu de l'état de la ligne).

Mais ces problèmes causes avec le modèle décrit ci-dessus. Parce que j'ai un objet représentant chaque ligne, je dois être informé lorsque les enregistrements sont ajoutés ou supprimés de la TDataSet. Et je ne peux pas voir comment faire cela.

Il est clair que je ne veux pas être accrochage aux événements de jeux de données; ils peuvent déjà être utilisés et le TDataLink est censé être le médiateur entre mon contrôle et l'ensemble de données. Et mes tentatives d'utilisation de la méthode virtuelle DataEvent a échoué, car il suffit de ne pas vous dire si un enregistrement est ajouté / supprimé.

Toutes les idées?

Était-ce utile?

La solution

Si vous accrochez votre descendant de TDataLink à un TDataSource qui est connecté à l'TDataSet vous recevez un appel dans la procédure RecordChanged lorsque les données changent.

Vous pouvez utiliser les événements OnDataChange et OnUpdateData d'un TDataSource connecté au TDataSet.

Autres conseils

Il semble, vous devez tirer votre propre classe de la classe d'ensemble de données de base que vous allez utiliser. Il vous aurez besoin passer outre InternalAddRecord, InternalPost, méthodes InternalDelete et les dossiers de poignée / suppression.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top