以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求张、李、王列计算代码  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=3911)

--  作者:老有所乐
--  发布时间:2009/8/18 18:18:00
--  求张、李、王列计算代码
“张”“李”“王”列数据是将“金额”列数据按照“参加分配人员数”平均分配的。同时根据“参加分配人员”列确定某列是否参加分配,如果“参加分配人员”列不包含该列名,该列则为空。求“张”“李”“王”列的代码。谢谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:复搭棚记录2.table

[此贴子已经被作者于2009-8-18 18:21:07编辑过]

--  作者:czy
--  发布时间:2009/8/18 19:08:00
--  
这样?

Dim dr As DataRow = e.DataRow
If e.DataCol.Name = "参加分配人员" Then
    If dr.IsNull("参加分配人员") Then
        dr("参加分配人数") = Nothing
        dr("张") = Nothing
        dr("李") = Nothing
        dr("王") = Nothing
    Else
        dr("参加分配人数") = dr("参加分配人员").Length
    End If
    If dr("参加分配人员").Contains("张") Then
        dr("张") = dr("金额") / dr("参加分配人数")
    End If
    If dr("参加分配人员").Contains("李") Then
        dr("李") = dr("金额") / dr("参加分配人数")
    End If
    If dr("参加分配人员").Contains("王") Then
        dr("王") = dr("金额") / dr("参加分配人数")
    End If
End if

--  作者:yangming
--  发布时间:2009/8/18 19:09:00
--  
If e.DataRow("参加分配人员").Contains("张") Then
    e.DataRow("张") =e.DataRow("金额")/e.DataRow("参加分配人数") 
End If
If e.DataRow("参加分配人员").Contains("李") Then
    e.DataRow("李") =e.DataRow("金额")/e.DataRow("参加分配人数") 
End If
If e.DataRow("参加分配人员").Contains("王") Then
    e.DataRow("王") =e.DataRow("金额")/e.DataRow("参加分配人数") 
End If

--  作者:狐狸爸爸
--  发布时间:2009/8/18 19:13:00
--  
If e.DataCol.Name = "参加分配人员" OrElse e.DataCol.Name = "金额" Then
    Dim s As String = e.DataRow("参加分配人员")
    Dim c As integer =  s.Length
    If c > 0 Then
        For i As integer = 0 To c-1
            e.DataRow(s.Chars(i)) = e.Datarow("金额")/c
        Next
    End If
End If
[此贴子已经被作者于2009-8-18 19:13:24编辑过]

--  作者:czy
--  发布时间:2009/8/18 19:17:00
--  
以下是引用狐狸爸爸在2009-8-18 19:13:00的发言:
If e.DataCol.Name = "参加分配人员" OrElse e.DataCol.Name = "金额" Then
    Dim s As String = e.DataRow("参加分配人员")
    Dim c As integer =  s.Length
    If c > 0 Then
        For i As integer = 0 To c-1
            e.DataRow(s.Chars(i)) = e.Datarow("金额")/c
        Next
    End If
End If
[此贴子已经被作者于2009-8-18 19:13:24编辑过]


行不通吧老六.

假如参加分配人员列有其它字符(比如其它姓,而表中又没有此列),那岂不要报错.


--  作者:老有所乐
--  发布时间:2009/8/18 22:43:00
--  
非常感激三位老师的指导!!!
--  作者:老有所乐
--  发布时间:2009/8/19 16:16:00
--  
以下是引用狐狸爸爸在2009-8-18 19:13:00的发言:
If e.DataCol.Name = "参加分配人员" OrElse e.DataCol.Name = "金额" Then
    Dim s As String = e.DataRow("参加分配人员")
    Dim c As integer =  s.Length
    If c > 0 Then
        For i As integer = 0 To c-1
            e.DataRow(s.Chars(i)) = e.Datarow("金额")/c
        Next
    End If
End If
[此贴子已经被作者于2009-8-18 19:13:24编辑过]

贺老师这个代码,如果在参加分配人员列输入张李王三人,张王李三列已将计算结果算好填入,但要删除一人王,如何使王列数据自动删除。代码该如何写,谢谢!


--  作者:mr725
--  发布时间:2009/8/19 16:45:00
--  
以下是引用老有所乐在2009-8-19 16:16:00的发言:

贺老师这个代码,如果在参加分配人员列输入张李王三人,张王李三列已将计算结果算好填入,但要删除一人王,如何使王列数据自动删除。代码该如何写,谢谢!

2楼代码好使,狐爸这个要在【参加分配人员】列中必须包含 张、王、李 且不能有其他的姓氏时才有效,放在datacolchanged中与删除不删除无关吧?


--  作者:老有所乐
--  发布时间:2009/8/19 16:57:00
--  
是的,我试了。主要是学习一下。贺老师代码简短些。
--  作者:mr725
--  发布时间:2009/8/19 17:06:00
--  

删除‘王’:这段代码:
    If c > 0 Then
        For i As integer = 0 To c-1
            e.DataRow(s.Chars(i)) = e.Datarow("金额")/c
        Next
    End If
改为:
    If c > 0 Then
        For i As integer = 0 To c-1
            e.DataRow(s.Chars(i)) = nothing
            e.DataRow(s.Chars(i)) = e.Datarow("金额")/c
        Next
    End If