以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于固定格式表填充数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=78872)

--  作者:lgj716330
--  发布时间:2015/12/18 22:32:00
--  关于固定格式表填充数据

问题一

Dim dr As DataRow = e.DataRow

Dim dt As DataTable =DataTables("部门损益总账")

If e.DataCol.Name = "部门" And dr.IsNull("部门")= False Then

    dr("其他日常营运成本_其他日常营运费用") = dt.Compute("sum(借方发生)", "[部门名称] = \'" & dr("部门") & "\' and [科目名称] =\'其他日常营运费用\'")

End If


如果是多列判断要怎么写,如图中,要统计日期和部门同时对应的数据



图片点击可在新窗口打开查看此主题相关图片如下:1234.png
图片点击可在新窗口打开查看


问题二

另外,上图中前面4列也可以从其他表中填充过来吗,填充代码写在哪里,我把下面这段代码也写在DataColChanged中,一重置列项目就退出


Dim Cols1() As String = {"所属单位","部门类型","日期","部门"}

Dim Cols2() As String = {"所属单位","部门类型","日期","部门"}

For Each dr1 As DataRow In DataTables("B").Select("[部门类型] = \'商场\'")

    Dim dr2 As DataRow = DataTables("A").AddNew()

    For i As Integer = 0 To Cols1.Length -1

        dr2(Cols2(i)) = dr1(Cols1(i))

    Next

Next


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目6.foxdb


[此贴子已经被作者于2015/12/18 22:56:20编辑过]

--  作者:Hyphen
--  发布时间:2015/12/19 8:48:00
--  

1. select case : http://www.foxtable.com/help/topics/0224.htm

 
2.写到DataTables("B").的DataColChanged中,B增加一列,A增加一列;B改A跟着改


 


--  作者:lgj716330
--  发布时间:2015/12/19 9:32:00
--  
以下是引用Hyphen在2015/12/19 8:48:00的发言:

1. select case : http://www.foxtable.com/help/topics/0224.htm

 
2.写到DataTables("B").的DataColChanged中,B增加一列,A增加一列;B改A跟着改


 请问上面解决的是第一个问题还是第二个问题


--  作者:Hyphen
--  发布时间:2015/12/19 9:37:00
--  
1是第一个问题,2是第二个问题

--  作者:lgj716330
--  发布时间:2015/12/19 9:48:00
--  
第二个问题,我用了两种方式测试了下,记录都有重复增加,帮我看看代码有什么问题
来源表:

图片点击可在新窗口打开查看此主题相关图片如下:5.png
图片点击可在新窗口打开查看

1、
Dim Vals As List(of String())
Vals = DataTables("B").GetValues("所属单位|部门类型|日期|部门")
For i As Integer = 0 To Vals.Count - 1
    Dim dr As DataRow = DataTables("A").AddNew()
    dr("所属单位") = Vals(i)(0)
    dr("部门类型") = Vals(i)(1)
    dr("日期") = Vals(i)(2)
    dr("部门") = Vals(i)(3)
Next

2、
Dim Cols1() As String = {"所属单位","部门类型","日期","部门"}
Dim Cols2() As String = {"所属单位","部门类型","日期","部门"}
For Each dr1 As DataRow In DataTables("B").Select("[部门类型] = \'商场\'")
    Dim dr2 As DataRow = DataTables("A").AddNew()
    For i As Integer = 0 To Cols1.Length -1
        dr2(Cols2(i)) = dr1(Cols1(i))
    Next
Next

结果如下:

图片点击可在新窗口打开查看此主题相关图片如下:6.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:7.png
图片点击可在新窗口打开查看



--  作者:Hyphen
--  发布时间:2015/12/19 10:02:00
--  

代码没有问题,应该是事件触发了3次。放出事件完整代码

 

如果是想一次性初始化多条数据,最好是用按钮或者菜单

 

DataColChanged适合逐条处理数据


--  作者:lgj716330
--  发布时间:2015/12/19 10:12:00
--  
好的,我用按钮试一下,第一个问题已按你说的解决,谢谢
--  作者:lgj716330
--  发布时间:2015/12/19 10:57:00
--  
通过设置按钮,第二个问题也已解决,谢谢

追问一下,如以下代码中
Dim dr As DataRow = e.DataRow
Dim dt As DataTable =DataTables("部门损益总账")
Select Case e.DataCol.Name
Case "日期","部门"
    dr("其他日常营运成本_其他日常营运费用") = dt.Compute("sum(借方发生)", "[部门名称] = \'" & dr("部门") & "\' and [所属日期] = \'" & dr("日期") & "\' and [科目名称] =\'其他日常营运费用\'")
End Select

如果我的“其他日常营运成本”下有几十项费用,每项费用我设一列,下面这句代码只能一项一项来写,还是有统一设置的方法
dr("其他日常营运成本_其他日常营运费用") = dt.Compute("sum(借方发生)", "[部门名称] = \'" & dr("部门") & "\' and [所属日期] = \'" & dr("日期") & "\' and [科目名称] =\'其他日常营运费用\'")

--  作者:Hyphen
--  发布时间:2015/12/19 11:14:00
--  
只能一项一项来写
--  作者:lgj716330
--  发布时间:2015/12/19 11:26:00
--  
好的,谢谢