以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  工龄自动计算问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=20420)

--  作者:douglas738888
--  发布时间:2012/6/8 10:43:00
--  工龄自动计算问题

请老师们,看看这个关于计算工资的代码,昨天输入到表属性时经测试可用也计算准确,今天再打开的时候无法计算,且自动生成的“工资”列不见了;如果新输入新员工入司时间后又出现“工资”列并准确计算,再次从新打开软件又出现同样的问题,不知是什么问题,是否以下代码编制有问题,特请教!!!!

 

Dim dt As DataTable = DataTables("集团员工档案")
If dt.DataCols.Contains("工齡") = False Then 
    dt.DataCols.Add("工齡", Gettype(Double))
End If
Dim drs As New List(of DataRow)
drs = dt.Select("入司时间 is not Null")
For Each dr As DataRow In drs
    dr("工齡") = Math.Round(DateDiff("m",dr("入司时间"),Date.Today())/12,1)
Next

[此贴子已经被作者于2012-6-8 11:06:33编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/6/8 10:57:00
--  

你用代码增加的临时列,重新打开后,肯定就不存在了的。

工龄列通过菜单增加,在AfterOpenProject事件加入代码:

 

Dim dt As DataTable = DataTables("集团员工档案")
Dim drs As New List(of DataRow)
drs = dt.Select("入司时间 is not Null")
For Each dr As DataRow In drs
    dr("工齡") = Math.Round(DateDiff("m",dr("入司时间"),Date.Today())/12,1)
Next

 


--  作者:douglas738888
--  发布时间:2012/6/8 11:49:00
--  
谢谢狐爸,已能显示和计算,但是有一个问题,当输入新员工的入司日期后,不会马上显示计算的数据,需要关闭程序,再次进入程序后才显现数据,不知直接显示的代码如何编制。
--  作者:狐狸爸爸
--  发布时间:2012/6/8 16:51:00
--  

设置这个表的DAtaColChanged事件:
 
Select Case e.DataCol.Name
    case “入司时间"

         Dim dr As datarow = e.Datarow
         if dr.IsNull("入司时间") Then

                dr("工龄") = Nothing

         else

               dr("工齡") = Math.Round(DateDiff("m",dr("入司时间"),Date.Today())/12,1)

         end if

End Select