以文本方式查看主题

-  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=162348)

--  作者:wangglby
--  发布时间:2021/4/12 15:55:00
--  帮看看代码错误

  想实现一个功能,实现表(有三列,级别,净重,数量)中 级别是1的行的净重等于他后面级别是2的行的数量和净重的乘之和(如果后面有级别是2的行)

 

 

 

If e.DataCol.Name = "净重" Or e.DataCol.Name ="数量" Then

 Dim c As Integer

Dim c1 As Integer =Tables("表A").Rows.count-1

For c = 0 To c1

Dim t1 As Table = Tables("表A")

 Dim r1 As Integer

 Dim r11 As Integer

 Dim A1 As Double = 0

 r1 =  CurrentTable.FindRow("[级别] = \'1\'",c,True)

 r11 = r1

  

If  r11 >=0 Then

If r11 < c1 Then

  If t1.Rows(r1+1)("级别") = 2  Then

  Do While    t1.Rows(r1+1)("级别") > 1  

  If t1.Rows(r1+1)("级别") = 2     Then

   A1 = A1 + t1.Rows(r1+1)("净重")*t1.Rows(r1+1)("数量")   

       End If   

     r1=r1+1

  Loop

t1.Rows(r11)("净重") =A1

End If

End If

End If

Next

End If

 

 

 

但是有报错,报错内容如下:

 

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.1.19.19
错误所在事件:表,表A,DataColChanged
详细错误信息:
调用的目标发生了异常。
从字符串“级别”到类型“Double”的转换无效。
输入字符串的格式不正确。

 

请帮看看怎么回事。

 

 

 

[此贴子已经被作者于2021/4/12 16:46:49编辑过]

--  作者:有点蓝
--  发布时间:2021/4/12 17:48:00
--  
If e.DataCol.Name = "净重" OrElse e.DataCol.Name ="数量" Then
    Dim jb As Integer = e.DataRow("级别")
    If jb > 1 Then
        Dim sum As Double
        For Each dr As DataRow In e.DataTable.Select("级别=" & jb)
            sum = sum + dr("净重") * dr("数量")
        Next
        e.DataTable.replacefor("物料信息_净重",sum,"级别=" & (jb-1))
    End If
End If
[此贴子已经被作者于2021/4/13 9:33:24编辑过]

--  作者:wangglby
--  发布时间:2021/4/12 18:23:00
--  
谢谢,好精简,我消化消化
--  作者:wangglby
--  发布时间:2021/4/13 9:21:00
--  

刚测试了下,报错,提示编译错误:replace不是DataTable的成员


--  作者:有点蓝
--  发布时间:2021/4/13 9:33:00
--  
e.DataTable.replacefor("物料信息_净重",sum,"级别=" & (jb-1))
--  作者:wangglby
--  发布时间:2021/4/14 23:05:00
--  

谢谢,第一次见这种代码,很实用,但还有个问题,

 

如果“级别”列最后1行的数值为1或 空白,则代码一切正常。

 

但是若“级别”列最后1行的数值为2的话,则报错

 

报错内容如下:

 

 

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.1.19.19
错误所在事件:表,表A,DataColChanged
详细错误信息:
调用的目标发生了异常。
从字符串“级别”到类型“Double”的转换无效。
输入字符串的格式不正确。

 

 

 

谢谢



--  作者:有点蓝
--  发布时间:2021/4/15 9:08:00
--  
表A,DataColChanged还有没有其它代码?

请上传实例测试

--  作者:wangglby
--  发布时间:2021/4/15 22:43:00
--  

我把别的代码删除,临时解决了,

 

但我在测试时又发现个问题。

 

用你提供的代码,如果级别里面有多个为1的行,代码会把所有级别大于1的行的数量和单重乘机累加,并把这个结果放在每个级别为1的单重列里面。

 

我期望的结果如图


--  作者:wangglby
--  发布时间:2021/4/15 22:43:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2021/4/15 22:46:00
--  
请上传实例测试