用一个 dxDBGrid 通过IBQuery得到查询结果后,使用IBQuery的AfterScroll在相应的Combo中显示数据,但每点击一次 dxDBGrid 中的记录,Combo中的数据就开始闪个不停,好像是把被点击记录之前的所有记录从头开始都显示了一遍,直到被点击的那一条记录为止。越是靠后的记录显示需要的时间越长,等待的时间也越长。这是为什么呢?

解决方案 »

  1.   

    估计就是你的AfterScroll事件里的代码的问题的吧
    贴出来让大家分析下啊?
      

  2.   

    AfterScroll里只有给控件赋值的语句,如下:
    procedure TFrmMain.IBQueryAfterScroll(DataSet: TDataSet);
    begin
      WriteData;
    end;procedure TFrmMain.WriteData;
    begin
      IBQuery.DisableControls;
      with IBQuery do
      begin
        a.Text:=FieldByName('Field1').AsString;
        b.CurId:=FieldByName('Field2').AsString;//combo
        c.Text:=FieldByName('Field3').AsString;
        d.Text:=FieldByName('Field4').AsString;    ...    n.Text:=FieldByName('Fieldn').AsString;
        //共40个控件
      end;
      IBQuery.EnableControls;
    end;
      

  3.   

    用中断看了一下,每点一下DBGrid,每个数据都要过一遍,不解?
      

  4.   

    把IBQuery.DisableControls和IBQuery.EnableControls;去掉
      

  5.   

    你肯定是其他的代码有问题,比如说你有没有使用过 TDataSource 的OnGetText或OnSetText事件?如果有用的话,就会引起这样的问题。
      

  6.   

    当然也有可能是dxDBGrid引起的, 把它换成TDBGrid试一下,看还有没有问题?
      

  7.   

    TO edgethinking(死鬼)
      没有使用过 TDataSource 的OnGetText或OnSetText事件倒是有可能是dxDBGrid引起的,但该如何解决?
      

  8.   

    把IBQuery换成ClientDataSet就没事了,不知道为什么?