gotobookmark(100分)

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

hsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
我在主从表中,使用的gotobookmark<br>procedure Tfm_O_Sale.BtnRefreshClick(Sender: TObject);<br>var<br>&nbsp; vpp,vppd:TBookMark;<br>begin<br>&nbsp; //刷新<br>&nbsp; try<br>&nbsp; &nbsp; if ADODs_O_SaleMaster.State in [dsEdit,dsInsert] then ADODs_O_SaleMaster.Cancel;<br>&nbsp; &nbsp; if ADODs_O_SaleDetail.State in [dsEdit,dsInsert] then ADODs_O_SaleDetail.Cancel;<br>&nbsp; &nbsp; vpp &nbsp;:=ADODs_O_SaleMaster.GetBookmark;<br>&nbsp; &nbsp; vppd :=ADODs_O_SaleDetail.GetBookmark;<br>&nbsp; &nbsp; dmMain.OpenFormAllTable(Self,2);--&gt;界面的ADOTable和ADOQuery全部刷新<br>&nbsp; finally<br>&nbsp; &nbsp; if (not ADODs_O_SaleMaster.IsEmpty) and (vpp &lt;&gt; nil) then<br>&nbsp; &nbsp; &nbsp; ADODs_O_SaleMaster.GotoBookmark(vpp); --主表,这句要等很长时间,不明白<br>&nbsp; &nbsp; if (not ADODs_O_SaleDetail.IsEmpty) and (vppd &lt;&gt; nil) then<br>&nbsp; &nbsp; &nbsp; ADODs_O_SaleDetail.GotoBookmark(vppd);<br>&nbsp; &nbsp; computAmount; --计算的<br>&nbsp; end;<br>end;
 
高手都去哪了
 
ADODs_O_SaleMaster.GotoBookmark(vpp); --主表,这句要等很长时间,不明白<br>楼主检查下,你这个数据集是否写了滚动处理事件或这触发了界面刷新事件,比如beforeScroll,afterscroll,界面事件比如 onchanged,onchanging,onfocusednodechanged等等
 
procedure TDataSet.GotoBookmark(Bookmark: TBookmark);<br>begin<br>&nbsp; if Bookmark &lt;&gt; nil then<br>&nbsp; begin<br>&nbsp; &nbsp; CheckBrowseMode;<br>&nbsp; &nbsp; DoBeforeScroll; &nbsp;//触发beforescroll事件<br>&nbsp; &nbsp; InternalGotoBookmark(Bookmark);<br>&nbsp; &nbsp; Resync([rmExact, rmCenter]);<br>&nbsp; &nbsp; DoAfterScroll; &nbsp; //触发afterscroll事件<br>&nbsp; end;<br>end;
 
补充楼上:<br>如果有这类事件的话,在GotoBookmark之前,先:<br>ADODs_O_SaleMaster.AfterScroll := nil;<br>... &nbsp; //别的事件也指定成nil<br>ADODs_O_SaleMaster.GotoBookmark;<br>ADODs_O_SaleMaster.AfterScroll := ADODs_O_SaleMasterAfterScroll;<br>...
 
谢谢,不过我按照你说的都做了,效果不是很明显。还有其它方法吗?
 
楼主,除了楼上的建议外,我有个建议哈。<br>在滚动主表时,明细表也在动,也就会去刷新页面。<br>建议将主,明细的DataSet都这样设置<br>cdsMaster.DisableControl;<br>cdsDetail.DisableControl;<br>try<br>&nbsp; .....<br>finally<br>&nbsp; cdsMaster.EnableControl;<br>&nbsp; cdsDetail.EnableControl;<br>end;<br><br>还有,提醒一下,你上面的代码没有对那两个BookMark进行释放喔。。。。
 
lngdtommy你好<br>按照你的做了,但速度问题出在<br>cdsMaster.EnableControl;<br>&nbsp;cdsDetail.EnableControl;
 
后退
顶部