又一个dbgrid的问题,看来是谁也救不了我了(100分)

J

jieson

Unregistered / Unconfirmed
GUEST, unregistred user!
我做一个监控的软件,需要每秒钟都刷新,
可是每次刷新的时候dbgrid都会自动把滚动条定位到最上方!
也就是说,根本看不了下面的数据,谁有什么办法能在刷新adoqueue的时候
让dbgrid的滚动条不动啊?
拜托了~~!
 
刷新前也保存它的Bookmark,刷新后再恢复bookmark;
 
adoqueue.last
 
var
temp:TBookmark;
begin
temp := DBGrid1.DataSource.DataSet.GetBookmark;
// 你的刷新代码
DBGrid1.DataSource.DataSet.GotoBookmark(temp);
end;
 
刷新前也保存它的recno,刷新后再恢复recno;
 
这样不行啊,dbgrid有个该死的滚动条,用bookmark,他老是上上下下的跳动!
能不能让它不动啊?
 
实在不行的话,一页能显示所有的行时不显示滚动条也行啊
 
救命啊!!!!!
 
我也碰到过这样的问题,
我当初解决的方案是先把数据集关掉,
刷新后再打开,但是这样很闪烁。
我后来的解决方案是不用dbgrid,
而是用了普通的stringgrid,自己根据数据集的变化填充。
stringgrid的刷新速度非常快,
所以看不到丝毫的闪烁,
问题总算是解决了。
我当时每次显示200多条数据,都没什么问题,
数据量再大点估计也还过得去吧。
 
q.DisableControls;
q.Requery;
q.Last;
q.EnableControls;
 
先定义一个书签Bookmark
保存当前记录最后一条记录给书签MyBookmark(借用yeath的代码,:))
var
temp:TBookmark;
begin
temp := DBGrid1.DataSource.DataSet.GetBookmark;
//控制DbGrid不能随便滚动记录
DBGrid1.Disablecontrol;
// 你的刷新代码
DBGrid1.DataSource.DataSet.GotoBookmark(temp);
//恢复DbGrid不能随便移动滚动条可以滚动记录
DBGrid1.Enablecontrol;
end;
 
楼上的楼上的办法到是不错,但是我时间紧啊
楼上的意思我没看明白啊!
 
其实很简单说白了就是:
定义书签bookmark保存当前记录
使用DisableControls使dbgrid不能随便移动记录,就是在你刷新完毕之前保持静止状态
使用EnableControl将Dbgrid 恢复原状态,就是可以自由刷新浏览了
 
谢谢各位,接受答案了
 
多人接受答案了。
 
顶部