2017-08-03 4 views
0

Dans mon DataSet (qui est conservé en tant que XML), j'ai une table Area avec trois colonnes: ID, Name et ParentId. ParentId est une clé étrangère qui renvoie à ID, créant ainsi une hiérarchie de zones.Alternative pour les expressions récursives dans DataColumn

Je veux maintenir le chemin complet de chaque zone dans une nouvelle colonne appelée Path, dont la valeur peut être définie de manière récursive comme

   { area.Name      ; if ParentId is null 
area.Path := { 
      { Parent.Path + "\" + area.Name ; otherwise 

J'aurais aimé mettre en œuvre cette colonne comme une colonne calculée. Malheureusement, lorsque je tente de définir la propriété Expression à l'expression suivante

iif(isnull(ParentId, 0) = 0, Name, Parent.Path + '\' + Name) 

Je reçois l'erreur suivante:

Cannot set Expression property due to circular reference in the expression.

Cela semble exclure une colonne calculée. Alors quelles sont les alternatives? C'est à dire. comment puis-je m'assurer que la colonne Path contient toujours une valeur correcte pouvant être utilisée dans une interface utilisateur liée aux données?

Répondre

1

liez un gestionnaire d'événement à la suite de datatable ajout/modification (événements d'utilisation se terminant par ING comme ceux-ci feu avant) des événements et vérifier la valeur étant ajoutée/modifiée a un chemin fermé

+0

Cette approche progressive ne va pas travailler lorsque le DataSet est lu à partir du XML, puisque les lignes ne sont pas nécessairement chargées dans l'ordre topologique (parents avant enfants), mais que toutes les lignes sont chargées dans la table et que les contraintes sont activées et vérifiées. –

+0

Donc un peu de post-traitement dans le cadre de la charge, sera nécessaire (?) –