Foxtable(狐表)用户栏目专家坐堂 → 关于日期型字段


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

主题:关于日期型字段

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


加好友 发短信
等级:小狐 帖子:334 积分:2722 威望:0 精华:0 注册:2010/5/20 13:07:00
关于日期型字段  发帖心情 Post By:2010/9/2 18:07:00 [只看该作者]

窗口中有一DateTimePicker控件,绑定到表中的日期型列,当在控件中不输入日期,然后保存表的时候,默认的把"0001-01-01"保存到表中的日期型字段中,这个有办法改变吗?就是不输入日期的时候,保存后该字段就为空值,而不是现在的默认值。

另外:如果我在窗口中把TextBox绑定到日期型列,虽然该日期型列的日期时间格式设置为:date,但是窗口中还是显示这样的格式:

2010-09-09 0:00:00,怎么改回正常啊?


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/9/2 18:53:00 [只看该作者]

以下是引用sophia在2010-9-2 18:07:00的发言:

窗口中有一DateTimePicker控件,绑定到表中的日期型列,当在控件中不输入日期,然后保存表的时候,默认的把"0001-01-01"保存到表中的日期型字段中,这个有办法改变吗?就是不输入日期的时候,保存后该字段就为空值,而不是现在的默认值。

 

 

我还没碰到过这种事情。


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


加好友 发短信
等级:小狐 帖子:334 积分:2722 威望:0 精华:0 注册:2010/5/20 13:07:00
  发帖心情 Post By:2010/9/2 19:09:00 [只看该作者]

CZY版主,请看看 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.table


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/9/2 19:15:00 [只看该作者]

如果是这种操作对话我会这样做。

 

Dim dr1 As Row =Tables("表A").current
Dim dr2 As Row =Tables("表B").addnew
If dr1.IsNull("第一列") = False Then
    dr2("第一列") = dr1("第一列")
End If


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


加好友 发短信
等级:小狐 帖子:334 积分:2722 威望:0 精华:0 注册:2010/5/20 13:07:00
  发帖心情 Post By:2010/9/2 19:27:00 [只看该作者]

我想问的是为什么把“0001-01-01”写进去了呢?

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/9/2 19:30:00 [只看该作者]

给你贴段帮助:

 

空值的判断

假定某个表的金额列,由单价、数量、折扣三列计算得出,此外年、月两列,由日期列计算得出。
根据我们之前的经验,可以将该表的DataColChanged事件设置为:

Dim dr As DataRow = e.DataRow
Select
Case e.DataCol.Name
   
Case "数量","单价","折扣"
        dr(
"金额") = dr("数量") * dr("单价") * (1 - dr("折扣"))
   
Case "日期"
        dr(
"年") = dr("日期").Year
        dr(
"月") = dr("日期").Month
End
Select

上面的代码看上去很完美,金额、年、月三列都能自动计算得出,可真的没问题吗?
我们来测试一下,你先在某行输入日期,年、月两列的值确是自动计算得出了,可是如果你删除日期列的内容,按道理年、月列的内容应该为空。
但事实上,年、月都会等于1,原因何在呢?
这是因为在日期列为空的时候,通过行返回的日期值并不是空值,而是等于: #0001-01-01#

所以为了“完美”,我们将DataColChanged事件代码改为:

Dim dr As DataRow = e.DataRow
Select
Case e.DataCol.Name
Case "数量","单价","折扣"
    dr("金额") = dr("数量") * dr("单价") * (1 - dr("折扣"))
Case "日期"
   
If dr.IsNull("日期") Then
'如果日期列为空
        dr("年") = Nothing
        dr("月") = Nothing
    Else

        dr("年") = dr("日期").Year
        dr("月") = dr("日期").Month
    End If
End
Select

这样输入日期,年、月列的值能自动计算得出,删除日期,年、月列也会自动被清空。


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/9/2 19:32:00 [只看该作者]

再谈空值

 

……

 

在某列内容为空的时候,会根据不同的列类型,返回不同的值,规则如下:

字符列:""
数值列:0
逻辑列:False
日期列:#0001-01-01 0:00:00#


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


加好友 发短信
等级:小狐 帖子:334 积分:2722 威望:0 精华:0 注册:2010/5/20 13:07:00
  发帖心情 Post By:2010/9/3 11:14:00 [只看该作者]

以下是引用sophia在2010-9-2 18:07:00的发言:

另外:如果我在窗口中把TextBox绑定到日期型列,虽然该日期型列的日期时间格式设置为:date,但是窗口中还是显示这样的格式:

2010-09-09 0:00:00,怎么改回正常啊?

这个问题是什么原因呢?


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/9/3 11:24:00 [只看该作者]

不存在单独的时间型字段。

如果不想显示日期的部分,用DateTimePicker输入,选择合适的日期时间格式。


 回到顶部