加急!关于DBCtrlGrid中放入某个数据感知部件的问题。。。。(200分)

  • 主题发起人 主题发起人 hbezwwl
  • 开始时间 开始时间
H

hbezwwl

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DBCtrlGrid+TsncDBCurrencyEdit(一个货币输入数据感知控件),该部件
经过修改源码已能放入DBCtrlGrid中,但是当表中有多个记录时,一旦焦点离开
该部件,它始终显示的是当前的记录值,而非像TDBEdit那样显示的是不同的记录值.
是不是tsncDBCurrencyEdit还需要修改的.
 
没用过,不过我用datepicker显示过数据库的时间类型的数据,估计你的和我这个思路差不多

procedure TForm4.DBGrid4MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
datetimepicker1.datetime:=ryadotable1.fieldbyname('出生日期').asdatetime ;
datetimepicker2.datetime:=ryadotable1.fieldbyname('进本单位日期').asdatetime ;
datetimepicker3.datetime:=ryadotable1.fieldbyname('参加工作时间').asdatetime ;


end;
 
to 楼上:我和你的这个不一样的,我是要把TsncDBCurrencyEdit放到TDBCtrlGrid上的.
但是显示数据不对,当前TDBCtrlGrid上的TsncDBCurrencyEdit都显示是当前记录的值.
只有纪录变动时才变动的.
 
没做过。谈一下想法吧。
照葫芦画瓢,看看DBEdit是怎么做的。
应该是那个DataChange函数吧。
 
to yzhshi我的确是照着做的,VCL的源码呀,但是还是没发现有什么地方不对.
 
对不起,没用过这个控件,我很少使用第三方控件。
猜想是不是和数据集关联的地方有问题,只能说这些了。 good luck
 
下面这个事件是否用了,看VCL这个似乎有用的。
procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK;
 
to yzhshi:有的,其实TsncDBCurrencyEdit只要不在TDBCtrlGrid中,使用是完全正常的,
它就是在TDBCtrlGrid中显示时,当前页中的TsncDBCurrencyEdit全部显示的是当前记录的
值.

我参考TDBEdit的源码,没发现有什么问题.
 
看了一下,主要影响的话语应该是下面这个:你应该已经加上了。
FDataLink.OnDataChange := DataChange;
 
当然加了,这些都有的,不然它也不是数据感知控件了,它就是在TDBCtrlGrid中才出错.
 
还有一个笨办法,会累S你的,设置Project->Comple-Use Debug Dcus,自己使用F7跟踪调试,看DBEdit都用了那些。[:D]
其实主要就是触发那个Change事件。。。
 
好,我来试试,反正学到东东才是硬道理.
 
[:D]慢慢来,注意身体吆。。。
 
你改了什么控件的代码?
在DBCGrid.pas中查找以下代码,
if Inserting and not (csReplicatable in Control.ControlStyle) then
DatabaseError(SNotReplicatable);
改成:
if Inserting and not (csReplicatable in Control.ControlStyle) then
{DatabaseError(SNotReplicatable);}exit;
这样你就能插入任何控件,而不受其影响。
 
to kkyy:
我已经把控件成功的插入到TDBCtrlGrid中了,只要在oncreate中加一句就行了.
现在问题是TsncDBCurrencyEdit在其中显示数据时出错.
可惜DFW不能贴图,要不贴个图大家一下就明白了.
 
那随便你了,呵呵,我用我自己的办法,基本上加入任何控件都没问题。
那你好好看看procedure Tdbctrlgrid.DrawPanel(DC: HDC; Index: Integer);过程,
然后再看看你的控件的代码,有没有与这个过程不合的。

 
to kkyy:这是我在TsncDBCurrencyEdit的create中添加的.
ControlStyle:=ControlStyle+[csReplicatable];
 
这是没问题的啊。
 
是呀,有那一句就可以放到TDBCtrlGrid中了.
TsncDBCurrencyEdit就是在TDBGrid中使用显示数据也是正常的,
但是唯独在TDBCtrlGrid中显示数据出错,TDBCtrlGrid中的所有行的
TsncDBCurrencyEdit都显示当前记录的该字段的值,不知道为什么呀.
 
控件本身是显示当前记录的值的,只不过画的时候可能出了问题。
 
后退
顶部