Foxtable(狐表)用户栏目项目发布 → 我的狐表练手作品: 人事工资管理


  共有93856人关注过本帖树形打印复制链接

主题:我的狐表练手作品: 人事工资管理

帅哥哟,离线,有人找我吗?
sheep204
  41楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:56 积分:844 威望:0 精华:0 注册:2011/3/10 13:40:00
  发帖心情 Post By:2011/3/12 13:46:00 [只看该作者]

向楼主学习并致敬

 回到顶部
帅哥哟,离线,有人找我吗?
popsun
  42楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:10 积分:160 威望:0 精华:0 注册:2011/3/26 22:11:00
  发帖心情 Post By:2011/3/27 11:15:00 [只看该作者]

不好意思,算出生年日期、性别和年龄的函数在哪找啊?我只在表属性事件里面找到了调用这几个函数的地方。我是初学,还请指教!

 回到顶部
美女呀,离线,留言给我吧!
yangming
  43楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2011/3/27 14:09:00 [只看该作者]

以下是引用popsun在2011-3-27 11:15:00的发言:
不好意思,算出生年日期、性别和年龄的函数在哪找啊?我只在表属性事件里面找到了调用这几个函数的地方。我是初学,还请指教!

在用户手册中都有的,我贴给你看看,呵

DataColChanged

某一列的内容被更改后执行,此时列的内容已经是更改后的值。

e参数属性:

DataTable:返回发生数据更改的数据表。
DataRow:  返回发生数据更改的数据行。
DataCol:  返回发生数据更改的数据列。
NewValue: Object类型,表示新的值。
OldValue: Object类型,表示旧的值

示例一

定在客户消费数据表中,有一逻辑型数据列,列名为“已结帐”,我们希望对于已结帐的行,能够自动通过审核(锁定),以免被误编辑。 
为实现这个目标,只需在DataColChanged事件中设置如下代码即可: 

If e.DataCol.Name = "已结帐" Then '如果是已结帐列的内容变动
   
If e.NewValue = True Then '而且变动后的值是True(已勾选)
        e.
DataRow.Locked = True '那么锁定此行
   
End If
End
If

示例二

列与列之间的计算,我们通常用表达式列来实现,但不是所有的计算都可以通过表达式来完成的。
例如员工表中有身份证号码、出生日期列,出生日期根据身份证号码计算得出。
为了自动计算出生日期,可以在员工表的的DataColChanged事件中加入下面的代码:

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

如果表中已经输入数据,那么在加入上述代码后,选择身份证号码列,然后在“数据表”功能区“列相关”功能组,单击下面的“重置”按钮:

即可计算出所有行的出生日期,今后新增数据或者修改身份证号码,出生日期可以自动计算得出,无需人工干预。

上面代码中,e.DataRow("身份证号码")和e.NewValue实际上是相等的,因为DataColChanged执行的时候,新值已经写入到表中。

所以下面这行代码:


e.
DataRow("出生日期") = ReadBirthday(e.DataRow("身份证号码"))


等效于:

e.DataRow("出生日期") = ReadBirthday(e.NewValue)

同样,因为新的值已经写入表中,所以如果要判断旧的值是否为空,只能用e.OldValue Is Nothing
如果要判断新值是否为空,则既可用:e.NewValue Is Nothing,也可用IsNull方法判断 ,如上面的:
e.DataRow.IsNull("身份证号码")
切不可用 e.DataRow("列名") Is Nothing 来判断新值是否为空,因为对于数值列,如果值为空,e.DataRow("列名")返回的是0,如果是日期列,则返回#01/01/0001#,显然这都不是空值。

示例三

可以肯定的是,一个表的列与列之间的计算关系往往不只一个。
假定一个表同时包括示例一和示例二的计算关系,你可以将这些代码简单地复制在一起,也可以用If... ElseIf...End If改写:

If e.DataCol.Name = "已结帐" Then
    If e.NewValue = True Then
        e.
DataRow.Locked = True
   
End If
ElseIf
e.DataCol.Name = "身份证号码" Then
   
If e.DataRow.IsNull("身份证号码") Then
        e.
DataRow("出生日期") = Nothing
   
Else
        e.DataRow("出生日期") = ReadBirthday(e.NewValue)
    End
If
End If

或者采用Select Case语句进行条件分支判断:

Select Case e.DataCol.Name
    Case "已结帐"
       
If e.NewValue = True Then
            e.
DataRow.Locked = True
       
End If
    Case
"身份证号码"
        If
e.DataRow.IsNull("身份证号码") Then
            e.
DataRow("出生日期") = Nothing
       
Else
            e.DataRow("出生日期") = ReadBirthday(e.NewValue)
        End
If
End
Select

 

我个人偏好Select Case语句,因为看上去更清晰简洁一些。

一些逻辑较为复杂的关系,可能需要多个Select Case语句才能表述:

Select Case e.DataCol.Name
    Case
"A列"
        '代码一
   
Case "B列"
       
'代码二
   
Case "E列"
       
'代码三
End
Select
Select
Case e.DataCol.Name
    Case
"A列","B列","C列"
       
'代码四
   
Case "E列", "F列"
       
'代码五

End Select

上面这段代码有两个Select Case语句,如果修改的是A列,则执行代码一和代码四,如果修改的是E列,则执行代码三和代码五,如果修改的是F列,则只执行代码五。

[此贴子已经被作者于2011-3-27 14:10:39编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
popsun
  44楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:10 积分:160 威望:0 精华:0 注册:2011/3/26 22:11:00
  发帖心情 Post By:2011/3/27 15:44:00 [只看该作者]

 谢谢,了解了,ReadBirthday 和 ReadSex 是内部函数。

 回到顶部
帅哥哟,离线,有人找我吗?
胡噜胡噜
  45楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:1 积分:65 威望:0 精华:0 注册:2011/3/29 9:00:00
  发帖心情 Post By:2011/3/29 9:08:00 [只看该作者]

先顶后看再学习

 回到顶部
帅哥哟,离线,有人找我吗?
weike
  46楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:1 积分:65 威望:0 精华:0 注册:2011/5/12 17:18:00
值得学习  发帖心情 Post By:2011/5/12 17:30:00 [只看该作者]

挺好的!值得学习

 回到顶部
帅哥哟,离线,有人找我吗?
yumendeyu
  47楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:10 积分:143 威望:0 精华:0 注册:2011/5/7 17:02:00
  发帖心情 Post By:2011/5/13 20:57:00 [只看该作者]

真是好教材,不过好像加载银行表时总报错,感谢楼主的辛勤工作,期待新作品

 回到顶部
帅哥哟,离线,有人找我吗?
bodaguanggao
  48楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:4 积分:96 威望:0 精华:0 注册:2011/5/21 9:26:00
  发帖心情 Post By:2011/5/21 9:29:00 [只看该作者]

楼主的精神值得学习,先赞个

 回到顶部
帅哥哟,离线,有人找我吗?
没事闲逛
  49楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:1 积分:65 威望:0 精华:0 注册:2011/5/22 17:19:00
  发帖心情 Post By:2011/5/22 17:22:00 [只看该作者]

收藏学习

 回到顶部
帅哥哟,离线,有人找我吗?
呢喃风
  50楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:4 积分:86 威望:0 精华:0 注册:2011/5/26 11:31:00
  发帖心情 Post By:2011/5/26 12:19:00 [只看该作者]

多谢楼主!

 回到顶部
总数 126 上一页 1 2 3 4 5 6 7 8 9 10 下一页 ..13