Si tienes que recorrer el Grid por fuerza, prueba algo parecido a esto, te hablo de memoria.
Código Delphi
[-]
var
maximo: tipodedatos;
resultado:tipodedatos;
begin
DataSet.First;
maximo:= dataset.FieldByName('campovalor').AsTipoDeDatos;
while not DataSet.First.eof do
begin
IF (StrToTipoDatos(DBGRID..Fields[columnadelvalordelgrid].Text) > maximo) then
begin
maximo:= StrToTipoDatos(DBGRID..Fields[columnadelvalordelgrid].Text;
end;
resultado:= StrToTipoDatos(DBGRID.Fields[columnaoperando1].Text) operacion StrToTipoDatos(DBGRID.Fields[columnaoperando2].Text) ;
DataSet.Next;
end;
ShowMessage(TipodatostoStr(maximo));
Al ir recorriendo el dataset el cursor va cambiando de registro en el Grid.
Prueba algo así.
Saludos.