Foxtable(狐表)用户栏目专家坐堂 → 求高手帮我改进代码(解决)


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

主题:求高手帮我改进代码(解决)

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
求高手帮我改进代码(解决)  发帖心情 Post By:2010/8/20 8:51:00 [只看该作者]

表中的代码如下:

 

Dim dr As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "单价","系数"
        dr("本工序成本") = dr("单价") * dr("系数")
    Case "本工序成本"
        If dr.IsNull("单价") Then
            dr("累计成本") = Nothing
        Else
            Dim ab As Byte = dr("加工级别") + 1
            Dim dr2,dr3,dr4 As DataRow
            Dim Filter As String = "成品型号= '" & dr("成品型号") & "' And 物料型号 = '" & dr("物料型号") & "' and 加工级别 = '" & ab & "'"
            dr2 = DataTables("表A").find(Filter)
            If dr("类别") = "成品" Then
                dr("累计成本") = DataTables("表A").Compute("Sum(累计成本)","[成品型号] = '" & dr("成品型号") & "' and [加工级别] = '" & ab & "'") + dr("本工序成本")
            Else
                If dr2 Is Nothing Then
                    dr("累计成本") = dr("本工序成本")
                Else
                    dr("累计成本") = dr("本工序成本") + dr2("累计成本")
                End If
            End If
        End If
    Case "累计成本"
        DataTables("表A").DataCols("本工序成本").RaiseDataColChanged()
End Select

 

有问题的代码

Case "累计成本"
        DataTables("表A").DataCols("本工序成本").RaiseDataColChanged()

 

看起来所有代码都没有问题,但是如果表格有上万行的时候,文件就会。。。。。

 

我想要的效果是:当表格中某一行的 “本工序成本” 发生变化时,本行所属的成品型号 的累计成本,自动累加。

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

[此贴子已经被作者于2010-8-20 13:31:49编辑过]

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/8/20 9:33:00 [只看该作者]

RaiseDataColChanged也是可以设置条件的,只针对符合条件的行触发


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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By:2010/8/20 10:44:00 [只看该作者]

Case "累计成本"
        DataTables("表A").DataCols("本工序成本").RaiseDataColChanged()

 

改:

 

Case "累计成本"

 

Dim ab As Byte = dr("加工级别") - 1

if dr(“类别”) = “原材料”or dr("类别") = "自制件" then

  Dim Filter As String = "成品型号= '" & dr("成品型号") & "' And 物料型号 = '" & dr("物料型号") & "' and 加工级别 = '" & ab & "'"
  DataTables("表A").DataCols("本工序成本").RaiseDataColChanged(Filter)

else

    Dim Filter1 As String = "成品型号= '" & dr("成品型号") & "'  and 加工级别 = '" & ab & "'"
    DataTables("表A").DataCols("本工序成本").RaiseDataColChanged(Filter1)

end if

 

 

我已填写了条件,,当发生变化后,Case "累计成本" 怎么不计算呢?


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/8/20 12:35:00 [只看该作者]

可以呀,只要变动系数、单价和本工序成本都能触动代码。

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/8/20 12:57:00 [只看该作者]

我想要的效果是:当表格中某一行的 “本工序成本” 发生变化时,本行所属的成品型号 的累计成本,自动累加。

 

应该:     Case "本工序成本"   再: DataTables("表A").DataCols("累计成本").RaiseDataColChanged(Filter)  吧


 回到顶部