Question

J'ai un ensemble de données avec 3 dataTables:

dtperson

dtsalary

ami

Chaque personne a des salaires et chaque personne a un ami.

J'ai ajouté une colonne DChisfriend dans DTSALARY et j'aimerais afficher le nom d'ami d'une personne possédant un salaire spécifié.

Ainsi, DTPerson a un nom de colonne, DTSALARY a une valeur de colonne et Dtfriend a un nom de colonne.

J'ai ajouté une colonne DChisfriend et défini l'expression à ce sujet:

dtsalary.add (dchisfriend);

dchisfriend.expression = "max (parent.child (Persons_Friend) .name)";

Mais cela ne fonctionne évidemment pas.

Pourriez-vous s'il vous plaît me dire comment mettre dans la colonne Dchisfriend Nom d'un ami d'une personne avec un salaire dans la table de salaire?

Était-ce utile?

La solution

Je pense qu'il n'y a aucun moyen d'accéder à une autre ligne dans "Expression" dans DataColumn.

La seule façon, comment réaliser un comportement similaire est le crochet à l'événement DatacolumnChanged sur les données de données où sont les données source, puis définissent la valeur calculée sur la colonne ordinaire (= colonne sans expression).

Autres conseils

Il existe en fait un moyen de le faire, à condition que les relations entre vos tables soient de 1 à 1 (bien que les lignes manquantes ne soient pas un énorme problème): créez deux relations plutôt qu'un, c'est-à-dire

var joinColT1 = table1.Columns["ID"];
var joinColT2 = table2.Columns["FK_IDT1"];
var rel1 = new DataRelation("R1To2", joinColT1, joinColT2, false);
var rel2 = new DataRelation("R2To1", joinColT2, joinColT1, false);
theDataSet.Relations.Add(rel1);
theDataSet.Relations.Add(rel2);
// Add the column you're after
var hisFriend = new DataColumn("HisFriend", typeof(string), "Parent([R2To1]).[HisFriend]");
table1.Columns.Add(hisFriend);
// Add a back-reference to the other table against the friend if you want, too
var hisFriendsSalary = new DataColumn("HisFriendsSalary", typeof(decimal) "Parent([R1To2]).[Salary]");
table2.Columns.Add(hisFriendsSalary);

Quelques notes, cependant: d'abord, lorsque j'ai expérimenté pour la première fois, j'ai eu des erreurs de syntaxe sans les crochets autour des noms de relation dans l'expression. Cela aurait pu être à voir avec les noms que j'avais utilisés pour les relations.

Deuxièmement, je crois que le résultat d'expressions est stocké contre les lignes (ils ne sont pas calculés "juste à temps" sur l'accès, ils sont calculés lorsque les valeurs changent et les résultats sont conservés). Cela signifie que vous stockez les données deux fois en utilisant cette approche. Parfois, ça va, et parfois ce n'est pas le cas.

Troisièmement, vous remarquerez que je n'utilise pas de contraintes. C'est parce que dans mes cas d'utilisation typiques, je ne m'attends pas à ce que chaque ligne ait un analogue dans l'autre table (c'est pourquoi il y a deux tables en premier lieu, assez souvent!). Cela peut (je n'ai pas vérifié dotnetframework.org) un impact sur les performances.

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