以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于重置列  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=102884)

--  作者:zhy400137
--  发布时间:2017/6/27 11:41:00
--  关于重置列
我下面这句代码写错了吗?
\'人为重置列
Tables("员工清单.离职记录").DataTable.DataCols("离职日期").RaiseDataColChanged()

不会引发相关列的重算,但点击狐表菜单上的重置列就可以,请问是什么原因,谢谢!

--  作者:zhy400137
--  发布时间:2017/6/27 11:43:00
--  
我写在了窗口的Afterload事件里
--  作者:zhy400137
--  发布时间:2017/6/27 11:53:00
--  
Dim dr As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "离职日期"
        If dr.Isnull("离职日期")=False Then
            Dim pr As DataRow = dr.GetParentRow("员工清单")
            If pr IsNot Nothing Then
                Dim y,m,d As Integer
                Dim dt1 As Date = pr("入职时间")
                Dim dt2 As Date = dr("离职日期")
                DateYMD(dt1,dt2,y,m,d)
                dr("工作年数")=y
                dr("工作月数")=y*12+m
                \'---------------------------------计算服装折旧-------------------------------------------------
                Dim drs As List(of DataRow)  = DataTables("工服管理").SQLSelect("员工编号=\'" & dr("员工编号") & "\' and 参与计算=1")
                Dim sumTotal As  Decimal
                For Each r As DataRow In drs
                    Select Case r("新旧")
                        Case "新"
                            Dim y1,m1,d1 As Integer
                            Dim dt_1 As Date = r("领用日期")
                            Dim dt_2 As Date = dr("离职日期")
                            DateYMD(dt_1,dt_2,y1,m1,d1)
                            m1=m1+IIF(D1>=15,1,0)
                            If y1>=2 Then
                                sumTotal = sumTotal+ 0
                            ElseIf y1*12+m1<3 Then
                                sumTotal = sumTotal+ 100+r("干洗费")*r("数量")
                            Else
                                sumTotal =sumTotal+(r("月折旧额")*(r("折旧月数")-(y1*12+m1)))
                            End If
                        Case "旧"
                            Dim y1,m1,d1 As Integer
                            Dim dt_1 As Date = r("领用日期")
                            Dim dt_2 As Date = dr("离职日期")
                            DateYMD(dt_1,dt_2,y1,m1,d1)
                            m1=m1+IIF(D1>=15,1,0)
                            If y1>=1 Then
                                sumTotal = sumTotal+ 0
                            Else
                                sumTotal =sumTotal+(r("月折旧额")*(r("折旧月数")-(y1*12+m1)))
                            End If
                    End Select
                Next
                sumTotal = Math.round(sumTotal,2)
                dr("服装折旧")=sumTotal
                \'---------------------------------计算培训扣款-------------------------------------------------
                Dim drs1 As List(of DataRow)  = DataTables("培训管理").SQLSelect("员工编号=\'" & dr("员工编号") & "\' and 参与计算=1")
                Dim studyTotal As  Decimal
                For Each r As DataRow In drs1
                    Dim y2,m2,d2 As Integer
                    Dim dtStart As Date = r("签约结束日期")
                    Dim dtEnd As Date = dr("离职日期")
                    DateYMD(dtStart,dtEnd,y2,m2,d2)
                    m2=m2+IIF(d2>=15,1,0)
                    If y2*12+m2<=0 Then
                        studyTotal = studyTotal+ 0
                    Else
                        studyTotal =studyTotal+(y2*12+m2)*(r("培训费用")/r("合同月数"))
                    End If
                Next
                studyTotal = Math.round(studyTotal,2)
                dr("培训扣款")=studyTotal               
            End If
        Else
            dr("工作年数")=Nothing
            dr("工作月数")=Nothing
            dr("服装折旧")=Nothing
            dr("培训扣款")=Nothing
        End If
End Select

--  作者:zhy400137
--  发布时间:2017/6/27 11:53:00
--  
这个是事件代码!
--  作者:zhy400137
--  发布时间:2017/6/27 11:59:00
--  
DataTables("离职记录").DataCols("离职日期").RaiseDataColChanged()

这样写也不行,非要点窗口的重置按钮。

--  作者:wyz20130512
--  发布时间:2017/6/27 12:08:00
--  
传实例看看,3楼事件代码中没见重置列的代码呀?
--  作者:有点色
--  发布时间:2017/6/27 12:17:00
--  

 是不是你表名写错了啊,你的是窗口表?试试

 

e.Form.Controls("Table1").Table.DataTable.DataCols("离职日期").RaiseDataColChanged()

 

[此贴子已经被作者于2017/6/27 12:47:41编辑过]

--  作者:wyz20130512
--  发布时间:2017/6/27 12:25:00
--  
e.Form.Controls("Table1").Table.DataTable.DataCols("离职日期").RaiseDataColChanged()
--  作者:zhy400137
--  发布时间:2017/6/27 12:51:00
--  
还是不行,3楼的代码是dataColChanged的代码,重置列的代码我是写在窗口的Afterload事件里。
--  作者:有点色
--  发布时间:2017/6/27 12:56:00
--  
 上传实例说明。