记得以前用过,好像叫 topvisable 之类的,类似ado的book,在刷新数据前在取得行号id,刷新完后再赋值回去。这样数据刷新了,行并没滚动

解决方案 »

  1.   

    Query.DisableControls
    Query.EnableControls;
      

  2.   

    CDS_ASTX.Locate('LOCALLIST',VarArrayOf([LocalList]), [loPartialKey]);  //定位到刷新前的那一行具体用法按F1看帮助
      

  3.   

    var
      p:Pointer;
    begin
    p:=ADOQuery1.GetBookMark;
     ...
    ADOQuery1.GoToBookMark(p);
    end;
      

  4.   

    不是在aodquery中设书签,我用的控件不是db的,我要在cxgrid刷新数据时设置
      

  5.   

    是否可以这样
    先记录下cxgrid的当前行号,刷新数据后,再重新定位cgrid的行号
      

  6.   

    看一下 DataView,还是ViewData里是不是有 RecordID,或者 RowID
      

  7.   

    定位的功能只和数据集有关,比如dataset,或者ClientDataset。
    和用什么样的Grid没关系的,普通的DBGrid或者CxGrid一样处理
      

  8.   


    var Curr_recn:integer;   //定义一个记录当前数据集的Recno
    begin
       Curr_recn:=adoquery1.recno;
      adoquery1.close;
      adoquery1.open;   //刷新了
      adoquery1.recno:=Curr_recn;
    end;
      

  9.   


    程序对对数据集的定位会不会自动反映到grid上呢?对DBGridEh.datasource.dataset中的记录定位是可以反映在DBGridEh上的
      

  10.   

    你看看这个控件有没有TopVisibleIndex这个属性,我用的cx系列的控件有这个属性。
    刷新前记录这个值,刷新后再设置这个属性值,cxtreelist可以实现你说的,实际用过
      

  11.   

    要不就是TopVisibleNode.AbsoluteIndex
      

  12.   

    对,要的就是这个,以前用过,忘了!TopVisibleIndex
      

  13.   

    刚才试了下这个代码,欢迎反馈Bug
    procedure TFlow.S1Click(Sender: TObject);
    var i:integer;
    begin
    i:=cxGrid1DBTableView1.Controller.FocusedRowIndex;
    **********.Active:=False;
    **********.Active:=True;
    try
      cxGrid1DBTableView1.Controller.FocusedRowIndex:=i;
    except
    end;end;
      

  14.   

    先前的那个没记录 顶行号,刷新后,仅焦点行能定位,但表格仍然无法显示到原位置,现在增加记录了顶行号,就可以了
    var i,ti:integer;
    begin
      i:=cxGrid1DBTableView1.Controller.FocusedRowIndex;  //记录焦点行号
      ti:=cxGrid1DBTableView1.Controller.TopRowIndex;     //记录顶行号
      数据集.Active:=False;
      数据集.Active:=True;
      try
        cxGrid1DBTableView1.Controller.FocusedRowIndex:=i; //焦点行定位到记录值
        cxGrid1DBTableView1.Controller.TopRowIndex:=ti;    //顶行 定位到记录值
      except
      end;
    end;