以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]请问项目里面的代码那里错了?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=96411)

--  作者:18523982317
--  发布时间:2017/2/20 13:41:00
--  [求助]请问项目里面的代码那里错了?
我在表属性的datacolchaged里面写了点代码,但是不是报错就是自动退出。。怎么写都不对,我想要实现,一行有6列双精度小数列,第六列等于前面5列之和,第七列等于前面5列的平均值。我这样写的代码为什么会导致系统自动关闭,请问该怎么写?

突然想起来个问题,如果我在窗口里定义了个代码a为整数,在表属性的datacolchaged也定义了a为整数,2个定义的a会不会冲突?

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

Select Case e.DataCol.Name
    Case "第一列","第二列","第三列","第四列","第五列","第六列"
        Dim a As Integer = 0
        If e.DataRow.IsNull("第一列") OrElse e.DataRow("第一列") = 0 Then
            e.DataRow("第一列") = Nothing
        Else
            a = 1
            e.DataRow("第六列") = e.DataRow("第一列")
        End If
        If e.DataRow.IsNull("第二列") OrElse e.DataRow("第二列") = 0 Then
            e.DataRow("第二列") = Nothing
        Else
            a = 2
            e.DataRow("第六列") = e.DataRow("第六列") + e.DataRow("第二列")
        End If
        If e.DataRow.IsNull("第三列") OrElse e.DataRow("第三列") = 0 Then
            e.DataRow("第三列") = Nothing
        Else
            a = 3
            e.DataRow("第六列") = e.DataRow("第六列") + e.DataRow("第三列")
        End If
        If e.DataRow.IsNull("第四列") OrElse e.DataRow("第四列") = 0 Then
            e.DataRow("第四列") = Nothing
        Else
            a = 4
            e.DataRow("第六列") = e.DataRow("第六列") + e.DataRow("第四列")
        End If
        If e.DataRow.IsNull("第五列") OrElse e.DataRow("第五列") = 0 Then
            e.DataRow("第五列") = Nothing
        Else
            a = 5
            e.DataRow("第六列") = e.DataRow("第六列") + e.DataRow("第五列")
        End If
End Select




[此贴子已经被作者于2017/2/20 13:48:18编辑过]

--  作者:18523982317
--  发布时间:2017/2/20 13:42:00
--  
往第一列第二列里写如数值就会自动关闭
--  作者:wyz20130512
--  发布时间:2017/2/20 13:44:00
--  
把代码贴出来看看。
--  作者:18523982317
--  发布时间:2017/2/20 13:49:00
--  
贴出来了,我还没写求平均值的代码,就试了下   不行了,直接退出系统


--  作者:wyz20130512
--  发布时间:2017/2/20 14:07:00
--  
Select Case e.DataCol.Name
    Case "第一列","第二列","第三列","第四列","第五列"
        e.DataRow("第六列") = e.DataRow("第一列")+e.DataRow("第二列")+e.DataRow("第三列")+e.DataRow("第四列")+e.DataRow("第五列")
        e.DataRow("第七列") = e.DataRow("第六列")/5
End Select

--  作者:18523982317
--  发布时间:2017/2/20 14:09:00
--  
关键是   不一定每行都有数据啊。。。只有3列有数据  就得除以3。。。
--  作者:有点蓝
--  发布时间:2017/2/20 14:26:00
--  
Select Case e.DataCol.Name
    Case "第一列","第二列","第三列","第四列","第五列"
        Dim cls() As String = { "第一列","第二列","第三列","第四列","第五列" }
        Dim count As Integer = 0
        Dim sum As Integer = 0
        For Each c As String In cls
            If e.DataRow.IsNull(c) = False andalso e.DataRow(c) <> 0 Then
                sum += e.DataRow(c)
                count += 1
            End If
        Next
        e.DataRow("第六列") = sum
        If count > 0 Then e.DataRow("第七列") = sum/count
End Select
[此贴子已经被作者于2017/2/20 14:48:52编辑过]

--  作者:18523982317
--  发布时间:2017/2/20 14:33:00
--  
有2个问题,1是感谢2位解决,有点蓝的代码还不够完善,因为有可能为0的情况。2是为什么我写的代码会直接导致系统退出,我没发现那里有逻辑错误啊??
--  作者:有点蓝
--  发布时间:2017/2/20 14:37:00
--  
增加一个判断即可
[此贴子已经被作者于2017/2/20 14:49:13编辑过]

--  作者:wyz20130512
--  发布时间:2017/2/20 14:38:00
--  
Select Case e.DataCol.Name
    Case "第一列","第二列","第三列","第四列","第五列"
        e.DataRow("第六列") = e.DataRow("第一列")+e.DataRow("第二列")+e.DataRow("第三列")+e.DataRow("第四列")+e.DataRow("第五列")
        Dim cs() As String = {"第一列","第二列","第三列","第四列","第五列"}
        Dim v As Integer
        For Each c As String In cs
            If e.DataRow.IsNull(c) = False And e.DataRow(c) <> 0 Then
                v = v +1
            End If
        Next
        e.DataRow("第七列") = e.DataRow("第六列")/V
End Select
[此贴子已经被作者于2017/2/20 14:42:02编辑过]