EDITO:
Bueno, entendi cualquier cosa
mejor borro lo que puse que nada que ver
En fin, creo que lo mejor es usar un TClientDataSet. En tu ClientDataSet deberias tener un campo numerico de orden como menciona gatosoft, y luego lo que haces es permitirle aumentar o decrementar ese numero. Luego reordenas el dataset. Es decir, te tendria que quedar algo como esto
Código Delphi
[-]
procedure TForm1.BtnMoveUpClick(Sender: TObject);
begin
if cds.First then
Exit;
try
cds.Edit;
cds.FieldByName('Order').AsInteger := cds.FieldByName('Order').AsInteger - 1;
finally
cds.Post;
end;
end;
Otra forma de verlo es utilizar cursores. Hay un pdf excelente de Cary Jensen (si mal no recuerdo, y espero haber escrito bien su nombre) en el FTP del club que no tiene desperdicio