以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 求包含多值字段的分组统计 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=118032) |
||||
-- 作者:SMXTB -- 发布时间:2018/4/23 17:37:00 -- 求包含多值字段的分组统计
对人员出行补助数据进行统计,但有多值字段包含出差人员,帮助中没有相关的例子,求指教
|
||||
-- 作者:有点甜 -- 发布时间:2018/4/23 18:42:00 -- 参考
http://www.foxtable.com/webhelp/scr/2400.htm
|
||||
-- 作者:SMXTB -- 发布时间:2018/4/24 9:16:00 -- 如果不显示临时表,直接绑定到窗口的表中,这个代码应如何修改?下面加粗的代码有错,提示不是该表成员 Dim dt As DataTable Dim dtb As New DataTableBuilder("统计") dtb.AddDef("XM", Gettype(String), 16) dtb.AddDef("BZJE", Gettype(Double)) dt = dtb.Build() Tables("统计_Table1").DataSource = dtb.BuildDataSource() \'开始逐行累加统计 Dim lst As New Dictionary(of String ,DataRow) \'定义一个字典,用于检索每个员工在统计表中对应的行 For Each dr1 As DataRow In DataTables("XXDJ").DataRows If dr1.IsNull("XM") = False Then \'如果工号列不为空 Dim nms() As String = (dr1("XM") & "," & dr1("TXRY")).Split(",") \'将工号列内容拆分成数组 Dim v As Double = dr1("BZJE") \'获得平均之后每个工号的生产数量 For Each nm As String In nms \'遍历参与加工此产品的每个工号 Dim dr2 As DataRow If lst.ContainsKey(nm) \'如果集合中包括此工号对应的行 dr2= lst(nm) \'将此行赋值给变量dr2 Else dr2 = dt.AddNew() \'否则增加一行. dr2("XM") = nm \'新增行的工号列设置为此工号 lst.add(nm,dr2) \'将新增行添加到字典中,以便接下来检索 End If dr2("BZJE") = dr2("BZJE") + v \'加上平均后的产量 Next End If Next |
||||
-- 作者:有点甜 -- 发布时间:2018/4/24 10:00:00 --
Dim dtb As New DataTableBuilder("统计")
|
||||
-- 作者:SMXTB -- 发布时间:2018/4/24 10:49:00 -- 上面例子的代码中,这个NM变量中有空值乍办?会导致新增行有空值,如何解决? dr2("XM") = nm \'新增行的工号列设置为此工号
|
||||
-- 作者:有点甜 -- 发布时间:2018/4/24 12:05:00 -- 加上判断,如
If nm = Nothing then continue for
或者
If nm > "" then \'原来代码 End If |
||||
-- 作者:SMXTB -- 发布时间:2018/5/3 15:06:00 -- 这个不行呀,只是显示了空表,而“统计”中的数据没有反映到窗口TABLEL1中,变量DT中的数据要加载到窗口表中 Dim dt As DataTable Dim dtb As New DataTableBuilder("统计") dtb.AddDef("XM", Gettype(String), 16) dtb.AddDef("BZJE", Gettype(Double)) dt = dtb.Build() Tables("统计_Table1").DataSource = dtb.BuildDataSource() \'开始逐行累加统计 Dim lst As New Dictionary(of String ,DataRow) \'定义一个字典,用于检索每个员工在统计表中对应的行 For Each dr1 As DataRow In DataTables("XXDJ").DataRows If dr1.IsNull("XM") = False Then \'如果工号列不为空 Dim nms() As String = (dr1("XM") & "," & dr1("TXRY")).Split(",") \'将工号列内容拆分成数组 Dim v As Double = dr1("BZJE") \'获得平均之后每个工号的生产数量 For Each nm As String In nms \'遍历参与加工此产品的每个工号 Dim dr2 As DataRow If lst.ContainsKey(nm) \'如果集合中包括此工号对应的行 dr2= lst(nm) \'将此行赋值给变量dr2 Else dr2 = dt.AddNew() \'否则增加一行. dr2("XM") = nm \'新增行的工号列设置为此工号 lst.add(nm,dr2) \'将新增行添加到字典中,以便接下来检索 End If dr2("BZJE") = dr2("BZJE") + v \'加上平均后的产量 Next End If Next [此贴子已经被作者于2018/5/3 15:07:49编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2018/5/3 15:19:00 -- Dim dt As DataTable Dim dtb As New DataTableBuilder("统计") dtb.AddDef("XM", Gettype(String), 16) dtb.AddDef("BZJE", Gettype(Double)) Tables("统计_Table1").DataSource = dtb.BuildDataSource() dt = Tables("统计_Table1").DataTable \'开始逐行累加统计 Dim lst As New Dictionary(of String ,DataRow) \'定义一个字典,用于检索每个员工在统计表中对应的行 For Each dr1 As DataRow In DataTables("XXDJ").DataRows If dr1.IsNull("XM") = False Then \'如果工号列不为空 Dim nms() As String = (dr1("XM") & "," & dr1("TXRY")).Split(",") \'将工号列内容拆分成数组 Dim v As Double = dr1("BZJE") \'获得平均之后每个工号的生产数量 For Each nm As String In nms \'遍历参与加工此产品的每个工号 Dim dr2 As DataRow If lst.ContainsKey(nm) \'如果集合中包括此工号对应的行 dr2= lst(nm) \'将此行赋值给变量dr2 Else dr2 = dt.AddNew() \'否则增加一行. dr2("XM") = nm \'新增行的工号列设置为此工号 lst.add(nm,dr2) \'将新增行添加到字典中,以便接下来检索 End If dr2("BZJE") = dr2("BZJE") + v \'加上平均后的产量 Next End If Next |