Foxtable(狐表)用户栏目专家坐堂 → [求助]这样的乘积如何实现?


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

主题:[求助]这样的乘积如何实现?

美女呀,离线,留言给我吧!
rophy0952
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:581 积分:4989 威望:0 精华:0 注册:2014/6/12 14:55:00
[求助]这样的乘积如何实现?  发帖心情 Post By:2014/7/31 13:23:00 [只看该作者]


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

已在表事件datacolchanged中写入代码,但是不知是否是因为“分切净重_合计”的数值是随着“分切净重_1”、分切净重_2”、分切净重_3” 。。。。的数值变化而变化的原因,最后的分切金额那里没有数字出现,请指教,谢谢!

If e.DataCol.name = "分切净重_合计" Then
    Dim dr As DataRow = e.DataRow
    dr("分切金额") = dr("分切净重_合计") * dr("分切单价")
End If

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


加好友 发短信
等级:童狐 帖子:268 积分:2227 威望:0 精华:0 注册:2013/2/4 11:02:00
  发帖心情 Post By:2014/7/31 13:36:00 [只看该作者]

表达式列的特殊性

我们知道,列的值发生变化,会相继触发DataColChanging和DataColChanged事件。
但是有一个例外: 表达式列的值发生变化时,并不会触发这两个事件。

假定C列是一个表达式列,根据A列和B列的值计算得出,而D列的值则根据C列的值用代码计算得出。
通常我们会这样编写DataColChanged事件的代码:

Select Case e.DataCol.Name
   
Case "C"
         
'计算D列的代码
End Select

但是上述代码是无效的,因为作为表达式列,C列发生变化的时候,并不会触发DataColChanged事件。

我们可以换个思路,既然C列是有A列和B列计算得出,那么C列发生变化,肯定是因为A列或B列发生变化引起的。
所以正确的代码是:

Select Case e.DataCol.Name
    Case "A" ,"B"
         
'计算D列的代码
End
Select


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/7/31 14:25:00 [只看该作者]

 表达式列不能触发Datacolchanged事件

 

 http://www.foxtable.com/help/topics/2381.htm

 


 回到顶部
美女呀,离线,留言给我吧!
rophy0952
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:581 积分:4989 威望:0 精华:0 注册:2014/6/12 14:55:00
  发帖心情 Post By:2014/7/31 15:26:00 [只看该作者]

谢谢指教!
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20140731152558.jpg
图片点击可在新窗口打开查看
我重新试过将代码加入其中,但还是不显示数据。

Select Case e.DataCol.name
    Case "分切净重_1","分切净重_2","分切净重_3","分切净重_4","分切净重_5","分切净重_6","分切净重_7","分切净重_8","分切净重_9","分切净重_10"
        Dim dr As DataRow = e.DataRow
        dr("分切净重_合计") = dr("分切净重_1")+dr("分切净重_2")+dr("分切净重_3")+dr("分切净重_4")+dr("分切净重_5")+dr("分切净重_6")+dr("分切净重_7")+dr("分切净重_8")+dr("分切净重_9")+dr("分切净重_10")
        dr("分切金额") = dr("分切净重_合计") * dr("分切单价")
End Select

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


加好友 发短信
等级:四尾狐 帖子:822 积分:5879 威望:0 精华:0 注册:2013/7/29 12:00:00
  发帖心情 Post By:2014/7/31 15:36:00 [只看该作者]

试试这样改:
Select Case e.DataCol.name
    Case "分切净重_1","分切净重_2","分切净重_3","分切净重_4","分切净重_5","分切净重_6","分切净重_7","分切净重_8","分切净重_9","分切净重_10"
        Dim dr As DataRow = e.DataRow
        Dim i As Integer
         i = dr("分切净重_1")+dr("分切净重_2")+dr("分切净重_3")+dr("分切净重_4")+dr("分切净重_5")+dr("分切净重_6")+dr("分切净重_7")+dr("分切净重_8")+dr("分切净重_9")+dr("分切净重_10")
        dr("分切金额") =  i * dr("分切单价")
End Select

 回到顶部
美女呀,离线,留言给我吧!
rophy0952
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:581 积分:4989 威望:0 精华:0 注册:2014/6/12 14:55:00
  发帖心情 Post By:2014/7/31 15:55:00 [只看该作者]

还是不行,分切金额那列依然没有数值。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/7/31 15:56:00 [只看该作者]

 回复4楼,你需要重置一下列,才会重新计算的。

 

 http://www.foxtable.com/help/topics/1469.htm

 


 回到顶部
美女呀,离线,留言给我吧!
rophy0952
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:581 积分:4989 威望:0 精华:0 注册:2014/6/12 14:55:00
  发帖心情 Post By:2014/7/31 16:23:00 [只看该作者]

回复有点甜:

用代码重置列后,系统出现错误,然后自动关闭。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/7/31 16:32:00 [只看该作者]

以下是引用rophy0952在2014-7-31 16:23:00的发言:
回复有点甜:

用代码重置列后,系统出现错误,然后自动关闭。

 

你Datacolchanged不要有多余代码,这一段代码没有问题

 

Select Case e.DataCol.name
    Case "分切净重_1","分切净重_2","分切净重_3","分切净重_4","分切净重_5","分切净重_6","分切净重_7","分切净重_8","分切净重_9","分切净重_10"
        Dim dr As DataRow = e.DataRow
        dr("分切净重_合计") = dr("分切净重_1")+dr("分切净重_2")+dr("分切净重_3")+dr("分切净重_4")+dr("分切净重_5")+dr("分切净重_6")+dr("分切净重_7")+dr("分切净重_8")+dr("分切净重_9")+dr("分切净重_10")
        dr("分切金额") = dr("分切净重_合计") * dr("分切单价")
End Select

 回到顶部