El problema es que seguramente estas usando una variable para ir acumulando, y el valor de esa variable será correcto si vas recorriendo el dataset secuencialmente, pero no lo será si lo vas recorriendo de manera aleatoria (como ocurre en un grid).
Precisamente por eso propuse hacerlo con un TClientDataSet y un provider, donde no tendrás ese problema.
Hasta luego.