Foxtable(狐表)用户栏目专家坐堂 → 帮看看代码错误


  共有2475人关注过本帖树形打印复制链接

主题:帮看看代码错误

帅哥哟,离线,有人找我吗?
wangglby
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:337 积分:3225 威望:0 精华:0 注册:2020/2/25 23:12:00
帮看看代码错误  发帖心情 Post By: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编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105947 积分:538804 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:337 积分:3225 威望:0 精华:0 注册:2020/2/25 23:12:00
  发帖心情 Post By:2021/4/12 18:23:00 [只看该作者]

谢谢,好精简,我消化消化

 回到顶部
帅哥哟,离线,有人找我吗?
wangglby
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:337 积分:3225 威望:0 精华:0 注册:2020/2/25 23:12:00
  发帖心情 Post By:2021/4/13 9:21:00 [只看该作者]

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


 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105947 积分:538804 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/13 9:33:00 [只看该作者]

e.DataTable.replacefor("物料信息_净重",sum,"级别=" & (jb-1))

 回到顶部
帅哥哟,离线,有人找我吗?
wangglby
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:337 积分:3225 威望:0 精华:0 注册:2020/2/25 23:12:00
  发帖心情 Post By:2021/4/14 23:05:00 [只看该作者]

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

 

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

 

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

 

报错内容如下:

 

 

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

 

 

 

谢谢



 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105947 积分:538804 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/15 9:08:00 [只看该作者]

表A,DataColChanged还有没有其它代码?

请上传实例测试

 回到顶部
帅哥哟,离线,有人找我吗?
wangglby
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:337 积分:3225 威望:0 精华:0 注册:2020/2/25 23:12:00
  发帖心情 Post By:2021/4/15 22:43:00 [只看该作者]

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

 

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

 

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

 

我期望的结果如图


 回到顶部
帅哥哟,离线,有人找我吗?
wangglby
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:337 积分:3225 威望:0 精华:0 注册:2020/2/25 23:12:00
  发帖心情 Post By:2021/4/15 22:43:00 [只看该作者]


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

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105947 积分:538804 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/15 22:46:00 [只看该作者]

请上传实例测试

 回到顶部
总数 14 1 2 下一页