Foxtable(狐表)用户栏目专家坐堂 → 如何通过代码逐级汇总和限制非末级录入数据?


  共有2615人关注过本帖树形打印复制链接

主题:如何通过代码逐级汇总和限制非末级录入数据?

帅哥哟,离线,有人找我吗?
爱相随
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:932 积分:6531 威望:0 精华:0 注册:2014/6/25 10:48:00
如何通过代码逐级汇总和限制非末级录入数据?  发帖心情 Post By:2020/12/27 14:09:00 [只看该作者]

比如在会计科目中,如何实现同一数据表中1002科目自动汇总100201和100202科目的数据?如何限制1002科目直接录入数据??

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
爱相随
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:932 积分:6531 威望:0 精华:0 注册:2014/6/25 10:48:00
  发帖心情 Post By:2020/12/29 8:31:00 [只看该作者]

谢谢老师,太感谢,无以言表!!祝您新年快乐!!

 回到顶部