以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]有关员工_退休提醒的刷新问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=70504) |
-- 作者:dogman -- 发布时间:2015/6/23 14:08:00 -- [求助]有关员工_退休提醒的刷新问题 人事信息表中有两列:"员工_证件号码"、"员工_退休提醒" 我在人事信息表的DataColChanged中代码如下: If e.DataCol.Name = "员工_证件号码" Then Dim txrq As Date \'退休日期 Dim txts As Byte = 61 \'提醒天数 If e.DataRow.IsNull("员工_证件号码") Then e.DataRow("员工_退休提醒") = Nothing Else If Len(e.DataRow("员工_证件号码")) <> 18 AndAlso Len(e.DataRow("员工_证件号码")) <> 15 Then e.DataRow("员工_退休提醒") = "格式不符" Else If ReadSex(e.DataRow("员工_证件号码")) = "男" Then txrq = Readbirthday(e.DataRow("员工_证件号码")).AddYears(60) ElseIf ReadSex(e.DataRow("员工_证件号码")) = "女" Then txrq = Readbirthday(e.DataRow("员工_证件号码")).AddYears(50) End If Dim dd As TimeSpan = txrq - Date.Today() If dd.TotalDays < 0 Then e.DataRow("员工_退休提醒") = "已过退休!" ElseIf dd.TotalDays >= 0 AndAlso dd.TotalDays <= txts Then e.DataRow("员工_退休提醒") = "!即将退休" Else e.DataRow("员工_退休提醒") = Nothing End If End If End If End If 此代码在输入"员工_证件号码"列后刷新"员工_退休提醒"列。 考虑到输入以后每天的刷新问题,我先是在人事信息表的AfterLoad中编写代码如下: For Each dr As DataRow In e.DataTable.DataRows Dim txrq As Date \'退休日期 Dim txts As Byte = 61 \'提醒天数 If dr.IsNull("员工_证件号码") Then dr("员工_退休提醒") = Nothing Else If Len(dr("员工_证件号码")) <> 18 AndAlso Len(dr("员工_证件号码")) <> 15 Then dr("员工_退休提醒") = "格式不符" Else If ReadSex(dr("员工_证件号码")) = "男" Then txrq = Readbirthday(dr("员工_证件号码")).AddYears(60) ElseIf ReadSex(dr("员工_证件号码")) = "女" Then txrq = Readbirthday(dr("员工_证件号码")).AddYears(50) End If Dim dd As TimeSpan = txrq - Date.Today() If dd.TotalDays < 0 Then dr("员工_退休提醒") = "已过退休!" ElseIf dd.TotalDays >= 0 AndAlso dd.TotalDays <= txts Then dr("员工_退休提醒") = "!即将退休" Else dr("员工_退休提醒") = Nothing End If End If End If Next 但是重新打开之后没反应。不知道为什么?大概是我还是内部数据源的原因吧? 于是\'停掉AfterLoad代码,改为在项目属性的AfterOpenProject中加代码如下: For Each dr As DataRow In DataTables("人事信息").DataRows Dim txrq As Date \'退休日期 Dim txts As Byte = 61 \'提醒天数 If dr.IsNull("员工_证件号码") Then dr("员工_退休提醒") = Nothing Else If Len(dr("员工_证件号码")) <> 18 AndAlso Len(dr("员工_证件号码")) <> 15 Then dr("员工_退休提醒") = "格式不符" Else If ReadSex(dr("员工_证件号码")) = "男" Then txrq = Readbirthday(dr("员工_证件号码")).AddYears(60) ElseIf ReadSex(dr("员工_证件号码")) = "女" Then txrq = Readbirthday(dr("员工_证件号码")).AddYears(50) End If Dim dd As TimeSpan = txrq - Date.Today() If dd.TotalDays < 0 Then dr("员工_退休提醒") = "已过退休!" ElseIf dd.TotalDays >= 0 AndAlso dd.TotalDays <= txts Then dr("员工_退休提醒") = "!即将退休" Else dr("员工_退休提醒") = Nothing End If End If End If Next 重新打开后即可刷新。(就量刚加好后就有刷新。) 我这个思路对吗?是不是确实不能用AfterLoad而应该用AfterOpenProject? |
-- 作者:dogman -- 发布时间:2015/6/23 14:10:00 -- (就是刚加好后就有刷新。) |
-- 作者:Bin -- 发布时间:2015/6/23 14:12:00 -- AfterOpenProject 才对 |