以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  多值字段统计  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=135795)

--  作者:wangj6666
--  发布时间:2019/6/3 13:36:00
--  多值字段统计
各位专家好!
      我在专业报表中编写了如下代码:

生成统计表的结构
Dim
 dt As DataTable
Dim
 dtb As New DataTableBuilder("统计")
dtb.AddDef(
"工号"Gettype(String), 16)
dtb.AddDef(
"产品"Gettype(String), 16)
dtb.AddDef(
"数量"Gettype(Double))
dt = dtb.Build()

\'开始逐行累加统计

Dim
 lst As New Dictionary(of String ,DataRow\'定义一个字典,用于检索每个员工在统计表中对应的行
For
 Each dr1 As DataRow In DataTables("产量登记").DataRows
    If
 dr1.IsNull("员工工号") = False Then 
\'如果工号列不为空
    
    Dim nms() As String = dr1("员工工号").Split(","\'将工号列内容拆分成数组
    
    Dim v As Double = dr1("数量") / nms.Length \'获得平均之后每个工号的生产数量
        For
 Each nm As String In nms
 \'遍历参与加工此产品的每个工号
            
Dim dr2 As DataRow 
            Dim
 key As String = nm & "|" & dr1("产品"
\'这里是关键,由工号和产品组成字典的关键词.
            
If lst.ContainsKey(key) \'如果集合中包括此关键词对应的行
                dr2= lst(key) 
\'将此行赋值给变量dr2
            
Else
                dr2 = dt.AddNew() 
\'否则增加一行.
                dr2(
"工号") = nm \'新增行的工号列设置为此工号
                dr2(
"产品") = dr1("产品"\'设置增行的产品
                lst.add(key,dr2) 
\'将新增行添加到字典中,以便接下来检索
            
End If
        dr2(
"数量") = dr2("数量") + v \'加上平均后的产量
        
Next
    
End If
Next
MainTable = Tables(
"统计")


然后在加载数中设置了分面加载。现在执行上述代码时,只统计出了当前加载页的数据,实际我想统计出统计选定节点下的所有数据,而非当前页的数据。请问以上代码还需要如何调整?谢谢!


--  作者:有点甜
--  发布时间:2019/6/3 15:42:00
--  
For Each dr1 As DataRow In DataTables("产量登记").DataRows
 
改成
 
For Each dr1 As DataRow In DataTables("产量登记").sqlSelect("")

--  作者:wangj6666
--  发布时间:2019/6/4 13:51:00
--  
谢谢回复!我将其修改后,能统计加载树选择后的其它未显示页面的数据了,但又不能实现我加载树选择什么部分就统计什么部分了。请问还需要作什么修改才能完成?谢谢!
--  作者:有点甜
--  发布时间:2019/6/4 15:29:00
--  

你点击加载树的时候,生成的条件,记录下来,然后写代码

 

For Each dr1 As DataRow In DataTables("产量登记").sqlSelect(这里写你加载树的条件)

 

比如 DataTables("产量登记").LoadFilter


--  作者:wangj6666
--  发布时间:2019/6/4 16:10:00
--  
谢谢!谢谢!搞定了!