以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教狐狸爸爸:关于从身份证号码中自动提取出生年月、性别、年龄代码问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=19828)

--  作者:lipiti
--  发布时间:2012/5/22 15:47:00
--  请教狐狸爸爸:关于从身份证号码中自动提取出生年月、性别、年龄代码问题
DataColChanged 事件

If e .DataCol . Name = "身份证号码" Then \'如果更改的是身份证号码列
    If e .DataRow . IsNull( "身份证号码" ) Then \'身份证号码是否为空
        e .DataRow ( "出生日期" ) = Nothing \'如果为空,则清除出生日期
        e .DataRow ( "性别") = Nothing
        e .DataRow ( "年龄") = Nothing 
    Else
        \'否则从身份证号码列中提取出生日期
        e .DataRow ( "出生日期" ) = ReadBirthday ( e. DataRow ("身份证号码" ))
        e .DataRow ( "性别") = ReadSex (e .DataRow ( "身份证号码" ))
        e .DataRow ( "年龄") = Date .Today . Year - e .DataRow ( "出生日期" ).Year
    End If
End If

狐狸爸爸帮忙看看以上代码写得对不对,或者有没有更换的代码,万分感谢!



--  作者:狐狸爸爸
--  发布时间:2012/5/22 16:10:00
--  

上面的代码,有问题吗?

我看不出有问题啊。


--  作者:lipiti
--  发布时间:2012/5/22 22:57:00
--  
呵呵,自动计算的年龄需要具体到 年月 日 比如今天是2012-05-22,在1982-05-22出生的年龄为30岁,在 1982-05-23出生的年龄为29岁;
后面找了几个狐狸爸爸之前回复的例子,终于可以了,把代码发布出来跟大家一起分享一下。

If e .DataCol . Name = "身份证号码" Then \'如果更改的是身份证号码列
    If e .DataRow . IsNull( "身份证号码" ) Then \'身份证号码是否为空
        e .DataRow ( "出生日期" ) = Nothing \'如果为空,则清除出生日期
        e .DataRow ( "性别") = Nothing
    Else
        \'否则从身份证号码列中提取出生日期
        e .DataRow ( "出生日期" ) = ReadBirthday ( e. DataRow ("身份证号码" ))
        e .DataRow ( "性别") = ReadSex (e .DataRow ( "身份证号码" ))
    End If
End If
If e.DataCol.name = "出生日期" Then \'如果更改的是出生日期列
    If e.DataRow.IsNull("出生日期") Then \'出生日期是否为空
        e.DataRow("年龄") = Nothing \'如果为空,则清除年龄
    Else
        \'否则从出生日期列中提取出年龄
        Dim n As Integer= Date.Today.Year - e.DataRow("出生日期").Year
        If e.DataRow("出生日期").AddMonths(n*12) > Date.Today Then
            n = n -1
        End If
        e.DataRow("年龄") = n
    End If
End If