比较简单的方法是在A和B表中都加一个辅助表达式列,Temp=isnull(A,'') + ' ' + isnull(B,'') + ' ' + isnull(C,'')
表A的datacolchanged事件
select case e.datacol.name
case "A"
datarow("D") = datatables("B").compute("Sum(D)","Temp = '" & e.datarow("Temp") & "'")
end select
表B的datacolchanged事件
select case e.datacol.name
case "A"
dim pr as datarow = datatables("A").find("Temp = '" & e.datarow("TEMP") & "'")
if pr isnot nothing then
datatables("A").datacols("A").RaiseDataColChanged(pr)
end if
end select
如果你用
datarow("D") = datatables("B").compute("Sum(D)","A = '" & e.datarow("A") & "' and B ='" & e.datarow("B") & "' and C = '" & e.datarow("C") & "'")
的话,如果表B的A或B或C列的值量很大的话(比如一次复制10000行进去),估计就要等好久。
其实,你这样设计是有问题的。应当表B中有一列AID,将它与A表中的ID关联起来,然后表B中增加表达式列A、B、C。
然后表A的D列用表达式sum(child.D)
[此贴子已经被作者于2017/7/12 17:47:07编辑过]