以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]RaiseDataColChanged的用法问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=91568) |
-- 作者:chnfo -- 发布时间:2016/10/13 15:28:00 -- [求助]RaiseDataColChanged的用法问题 表A中有ID、Code、A、P、V、CA、CP、CV、Class、FCode 、…………等列 Class = 2时
A、P变化会导致V变化,并导致class = 1的V值变化 CA、CP变化会导致CV变化,并导致Class = 1的CV值变化 A变化会导致CA变化 如何来写datacolchanged事件效率会高一些? dim r as datarow = e.datarow select case r("Class") case 2 dim fil as string = "合计条件" select case e.datacol.name case "A","p" r("V") = r("A") * r("P") e.datatable.datacols("ID").RaiseDataColChanged("Code = \'" & r("FCode") & "\'") end select select case e.datacol.name case "A","CP" r("CA") = r("A") +datatables("B").compute("sum(A)",fil) r("CV") = r("CA") * r("CP") e.datatable.datacols("ID").RaiseDataColChanged("Code = \'" & r("FCode") & "\'") end select case 1 dim fil as string = "汇总条件" select case e.datacol.name case "ID" r("V") = e.datatables("A").compute("Sum(V)",fil) r("CV") = e.datatables("A").compute("Sum(CV)",fil) end select end select 感觉这样,Class = 2的行中A变化时,它会重置一次,而它导致CA变化,又会重置一次。可能效率有影响。 如何效率会高一点呢? [此贴子已经被作者于2016/10/13 16:01:48编辑过]
|
-- 作者:有点蓝 -- 发布时间:2016/10/13 16:20:00 -- [此贴子已经被作者于2016/10/13 16:23:44编辑过]
|
-- 作者:有点蓝 -- 发布时间:2016/10/13 16:24:00 -- Dim r As DataRow = e.DataRow Select Case e.DataCol.name Case "A","p" If r("Class") = 2 r("V") = r("A") * r("P") If e.DataCol.name = "A" Then r("CA") = r("A") +DataTables("B").compute("sum(A)",fil) Else e.DataTable.datacols("ID").RaiseDataColChanged("Code = \'" & r("FCode") & "\'") End If End If Case "CA","CP" If r("Class") = 2 r("CV") = r("CA") * r("CP") e.DataTable.datacols("ID").RaiseDataColChanged("Code = \'" & r("FCode") & "\'") End If Case "ID" If r("Class") = 1 Dim fil As String = "汇总条件" r("V") = e.DataTables("A").compute("Sum(V)",fil) r("CV") = e.DataTables("A").compute("Sum(CV)",fil) End If End Select
|
-- 作者:chnfo -- 发布时间:2016/10/18 16:08:00 -- 是否可以这样呢?似乎看起来更直观一点,代码是多了点 select case r("Class") case 2 select case e.datacol.name case "A" r("CA") = r("A") + X end select select case e.datacol.name case "A","P" r("V") = r("A") * r("P") case "CA","CP" r("CV") = r("CA") * r("CP") end select select case e.datacol.name case "V" e.DataTable.datacols("A").RaiseDataColChanged("Code = \'" & r("FCode") & "\' and Class = 1") case "CV" e.DataTable.datacols("CA").RaiseDataColChanged("Code = \'" & r("FCode") & "\' and Class = 1") end select case 1 Dim fil As String = "汇总条件" select case e.datacol.name case "A" r("V") = e.DataTables("A").compute("Sum(V)",fil) case "CA" r("CV") = e.DataTables("A").compute("Sum(CV)",fil) end select end select
[此贴子已经被作者于2016/10/18 16:09:53编辑过]
|
-- 作者:有点蓝 -- 发布时间:2016/10/18 16:11:00 -- 你自己测试通过就可以,这个我没有办法判断,我只是根据代码逻辑来改,看不到你的业务逻辑。 |
-- 作者:chnfo -- 发布时间:2016/10/18 16:25:00 -- 是可以通过,只是效率问题。现在数据量还没那么大 当class = 2 时 A变化,则CA变化 A,P变化,则V变化 CA,CP变化,则CV变化 当V或CV变化时,重置class = 1的A或CA,计算它们的V或CV值。
[此贴子已经被作者于2016/10/18 16:25:11编辑过]
|
-- 作者:有点蓝 -- 发布时间:2016/10/18 16:40:00 -- 效率的东西要有数据对比测试才能确定 |