起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 198|回复: 4

【结贴】日期时间型控件输入有错

[复制链接]
发表于 2009-7-14 13:38:31 | 显示全部楼层 |阅读模式
表里面出生日期字段的DisplayFormat属性设置为“yyyy'年'mm'月'dd'日'”,用DataEdit控件关联,然后就只能选择,可是用户反映选择起来太慢,希望可以直接输入,可是直接输入的结果完全是错误的。
比如我输入19990304,它解析为1999-04-01,我输入19991013,它就直接报错了,说1999-13-01格式有问题。就是说它根本没解析月份的两位,把日期当作月份解析,然后日期直接就填01了。
这个要怎么解决啊?急啊……
回复

使用道具 举报

发表于 2009-7-14 14:29:23 | 显示全部楼层
不要日期选择直接输入可以用TDateTimePicker(可以选择也可以录入)或者用TMaskEdit(手动输入),无论用哪种对于数据的维护需要自己代码处理。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-14 15:05:30 | 显示全部楼层
控件不能自动和数据集关联,代码写起来复杂还是其次的。更麻烦的在于,我是在表格中做的,把控件插入表格问题多得很,一页显示不下的话刚出来的时候自动往上飞,还有风格也完全不统一,明显地和其他单元格差很多,这些都没法写代码解决。
还有上次问过其实TDateTimePicker控件本身也有些问题,如果选择了ShowCheckbox属性,输入的时候会自动往回跳,定位太难了。
我就是想了解DataEdit控件解析时期的时候格式是怎样的,有没有办法在表里面控制,如果不行的话也只好这样了。
回复 支持 反对

使用道具 举报

发表于 2009-7-14 16:06:13 | 显示全部楼层
楼主,有一个方法,你还按上面的方式,但是要做一个代码,自己去解析用户输入的日期为符合规则的日期格式。
比如我下面的测试过程,数据表中有两列,一列(RQ)是日期格式,显示格式为yyyy'年'mm'月'dd'日',一列(RQZF)是字符,然后在RQZF这列输入形如20090304,然后RQ列就可以自动显示为你需要的格式。(这个方法仅供参考。)

procedure TRQTXBD.DataSetBrokerBZSJJ1DataChange(Sender: TObject; Field: TDataField);
var
  s,st : String;
begin
  if (Field <> nil) and (Field.FieldName = 'RQZF') then
  begin
    s := DataSetBrokerBZSJJ1.DataSet.FieldByName('RQZF').AsString;
    st := StringUtils.Copy(s,1,4) + '-';
    s := StringUtils.Copy(s,5,Length(s));

    st := st + StringUtils.Copy(s,1,2) + '-';
    s := StringUtils.Copy(s,3,Length(s));

    st := st + s;

    //DataSetBrokerBZSJJ1.DataSet.Edit;
    DataSetBrokerBZSJJ1.DataSet.FieldByName('RQ').AsString := st;
    //DataSetBrokerBZSJJ1.DataSet.Post;
  end;
end;

注意,对于用户输入的日期格式要有一定得规则,也就是说上面的处理过程依赖于一定的规则(这里的逻辑需要楼主自己去完善,我只是提供一个方法)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-15 09:13:35 | 显示全部楼层
这种方法多出一个控件了,又不能让用户感觉到这个控件的存在,两个控件必须重合,这种方法我以前也用过,控制起来太难了,始终有办法让它出问题。
算了,如果没法用DataEdit控件解决,干脆我填个默认值让他改好了,大不了保存的时候我再判断这个值是否有效。
结贴吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-19 02:42 , Processed in 0.041341 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表