我是一个 Delphi 新手,新近做了一个数据库感知组件 TDBDateTimePicker
看名称就知道是为数据库日期时间而设计的组件,组件是从 TDateTimePicker
继承过来的,用得挺好的(可以连接数据库,用鼠标可修改其内容并提交到数据库)
但如果我用代码修改日期时间的值它用不会提交到数据库,因为我的提交是在
组件失去焦点的时候进行的,我本来想在 TDateTimePicker 的 OnChange 事件中
写提交的代码,但我发现如果用鼠标键盘操作它会激发 OnChange 事件,但如果
用代码直接给 TDateTimePicker.DateTime 赋值则不会激发 OnChange 事件,
请问众前辈:怎么做才能使 TDBDateTimePicker 的 DateTime 属性被赋值时自动
提交数据 ?

解决方案 »

  1.   

    其实这个问题在所有的DB控件,如DBEdit中也会这样:
    如:
    DBEdit1.text:='hello world!';
    但你会发现你的数据库的内容并没有跟着改,所以要在代码中更新,只有这样写:
    DBedit1.datasource.dataset.edit;
    DBEdit1.datasource.dataset.fieldbyname('filed1').asstring:='hello world';所以你的控件是没有问题的了,只需要按目前的功能,调用者应该去用自己的办法去调用你的控件了!
      

  2.   

    想一个其它办法了,你为你的控件添加一个方法,如SetDateTime(pdatetime:TDateTime):Boolean;然后,在调用的时候用户只要写成:
    DBDateTimePicker1.SetDateTime('2002-02-03');就可以了而你自己实现这个方法,我想应该不会很难吧,只要把你原来写在OnChange的代码移过来,当然在这之前加一句:
    self.datetime:=pdatetime;
      

  3.   

    up觉得挺好用的。
    能不能给我也发一个:[email protected] 多谢!!
    (包括源代码)