我在控件中加入了TMyDataLink。
当连接的DataSource.DataSet内容发生
变化时要动态更新控件。我取记录的方式是重载MyDataLink.DataEvent
begin
inherited;
while not MyDataLink.DataSource.DataSet.eof do
 begin
   ...
   MyDataLink.DataSource.DataSet.Next
 end
...
问题是调用MyDataLink.DataSource.DataSet.Next会触发
DataEvent调用,程序进入死循环!
请教如何读取记录数据而不产生DataEvent。

解决方案 »

  1.   

    这个简单,置一个标志位即可,比如:
    begin
    if Tag<>0 then Exit;
    Tag:=1;
    inherited;
    while not MyDataLink.DataSource.DataSet.eof do
     begin
       ...
       MyDataLink.DataSource.DataSet.Next
     end
    ...
    Tag:=0;
    end;
      

  2.   

    MyDataLink.DataSource.DataSet.Next;一执行就会调用DataEvent
      

  3.   

    为什么非要通过DataLink这中层跟DataSet通讯,又不能复用?一直没搞明白VCL为什么设计DataLink,或许没能理解设计者的意图.
      

  4.   

    我修改的那段代码执行也不要紧,如果是在执行DataEvent依靠tag的值避免递归调用。