Pregunta

Tengo un conjunto de datos con 3 datos de datos:

dTTPERSON

dtsalary

amigo

Cada persona tiene salarios, y cada persona tiene un amigo.

Agregué una columna Dchisfriend en DTSALARY y me gustaría mostrar el nombre de un amigo de una persona que posee el salario especificado.

Entonces, Dtperson tiene un nombre de columna, Dtsalary tiene valor de columna y Dtfid tiene un nombre de columna.

He agregado la columna dchisfriend y establecí expresión en esto:

dtsalary.add (dchisfriend);

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

Pero esto obviamente no funciona.

¿Podrías decirme cómo poner en la columna Dchisfriend Nombre de una amiga de una persona con un salario en la mesa salarial?

¿Fue útil?

Solución

Creo que no hay forma de acceder a ninguna otra fila en "expresión" en Datacolumn.

La única forma, cómo lograr un comportamiento similar es el gancho para el evento DataColumnChanged en Datateable donde están los datos de origen y luego establecer el valor calculado en la columna regular (= columna sin expresión).

Otros consejos

En realidad, hay una manera de hacer esto, siempre que las relaciones entre sus tablas sean 1 a 1 (aunque las filas faltantes no son un gran problema): cree dos relaciones en lugar de una, es decir

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);

Sin embargo, un par de notas: primero, cuando estaba experimentando por primera vez con esto, recibí errores de sintaxis sin los soportes cuadrados alrededor de los nombres de las relaciones en la expresión. Sin embargo, eso podría haber tenido que ver con los nombres que había usado para las relaciones.

En segundo lugar, creo que el resultado de las expresiones se almacena con las filas (no se calculan "justo a tiempo" en el acceso, se calculan cuando los valores cambian y los resultados se mantienen). Eso significa que está almacenando los datos dos veces utilizando este enfoque. A veces está bien, y a veces no lo es.

Tercero, notarás que no estoy usando restricciones. Esto se debe a que en mis casos de uso típicos, no espero que cada fila tenga un análogo en la otra tabla (por eso hay dos tablas en primer lugar, ¡con bastante frecuencia!). Eso puede (no he verificado dotnetframework.org) tener un impacto en el rendimiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top