以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何通过代码逐级汇总和限制非末级录入数据?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=159457)

--  作者:爱相随
--  发布时间:2020/12/27 14:09:00
--  如何通过代码逐级汇总和限制非末级录入数据?
比如在会计科目中,如何实现同一数据表中1002科目自动汇总100201和100202科目的数据?如何限制1002科目直接录入数据??
--  作者:chnfo
--  发布时间:2020/12/27 16:58:00
--  
假定
1、要汇总的列为V,财务科目列为C
2、会计科目是有规则的,例如每2位为一个层级

在datacolchanged事件中
select case e.datacol.name
  case "V"
    dim s as string = e.datarow(“C”)
    \'先找到当前财务科目的所有上级
      dim dic as new dictionary(of datarow,double)
      for i as integer = 0 to s.length - 1 step 2
        dim x as string = s.substring(i,2)
        dim r as datarow = e.datatable.find("C = \'" & x &“‘”)
        if r isnot nothing then 
          dic.add(r,r("V") + e.newvalue - e.oldvalue)
        end if 
      next

      systemready = false 
      for each dr as datarow in dic.keys
          dr("V") = dic(dr)
      next
      systemready = true
end select 


如果要禁止在科目的父节点输入数值,可以在PrepareEdit事件中
select case e.col.name
  case "V"
    dim dr as datarow = e.table.datatable.find("C like \'" & e.row("C") & "%\'")
      if dr isnot nothing then 
        e.cancel = true
      end if 
end select 
[此贴子已经被作者于2020/12/27 17:13:03编辑过]

--  作者:爱相随
--  发布时间:2020/12/29 8:31:00
--  
谢谢老师,太感谢,无以言表!!祝您新年快乐!!