以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  计算提成的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=21974)

--  作者:191422411
--  发布时间:2012/7/29 22:38:00
--  计算提成的问题

 

[此贴子已经被作者于2014-10-30 21:50:30编辑过]

--  作者:sloyy
--  发布时间:2012/7/30 0:08:00
--  

请参考 多值字段与统计

\'生成统计表的结构
Dim dt As DataTable
Dim dtb As New DataTableBuilder("工资表")
dtb.AddDef("姓名", Gettype(String), 16)
dtb.AddDef("工资", Gettype(Single))
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
            If lst.ContainsKey(nm) \'如果集合中包括此员工对应的行
                dr2= lst(nm) \'将此行赋值给变量dr2
            Else
                dr2 = dt.AddNew() \'否则增加一行.
                dr2("姓名") = nm \'新增行的姓名列设置为此姓名
                lst.add(nm,dr2) \'将新增行添加到字典中,以便接下来检索
            End If
            dr2("工资") = dr2("工资") + v \'加上平均后的产量
        Next
    End If
Next
MainTable=Tables("工资表")

[此贴子已经被作者于2012-7-30 0:12:54编辑过]