以文本方式查看主题

-  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 才对