Normalmente cuando recorro un DataSet, que tiene asociado controles visuales hago esto:
Código:
DataSet.DisableControls;
try
Bookmark := DataSet.Bookmark;
try
DataSet.First;
while not DataSet.EOF do begin
....
DataSet.Next;
end;
finally
DataSet.Bookmark := Bookmark;
end;
finally
DataSet.EnableControls;
end;
El DisableControls es para que los controles no reflejen el cambio de registro y el BookMark es para retornar a la posición anterior.
Comentario: Ten en cuenta que este código esta recorriendo el DataSet desde el primer registro, creo que esto tu no lo quieres.
Saludos!