人事信息表中有两列:"员工_证件号码"、"员工_退休提醒"我在人事信息表的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?