以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]请问项目里面的代码那里错了? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=96411) |
||||
-- 作者:18523982317 -- 发布时间:2017/2/20 13:41:00 -- [求助]请问项目里面的代码那里错了? 我在表属性的datacolchaged里面写了点代码,但是不是报错就是自动退出。。怎么写都不对,我想要实现,一行有6列双精度小数列,第六列等于前面5列之和,第七列等于前面5列的平均值。我这样写的代码为什么会导致系统自动关闭,请问该怎么写? 突然想起来个问题,如果我在窗口里定义了个代码a为整数,在表属性的datacolchaged也定义了a为整数,2个定义的a会不会冲突?
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编辑过]
|