以文本方式查看主题 - 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 -- 上传实例说明。 |