May not be the most elegant method but you can have the button know its position by generating it with a fixed input, the original order.
The order list is then used to sort the list. Up means changing its current order value with the one above. moving down changing it with the order values below.
len = 10;
order = Range[len];
MoveUp[n_] := With[{i = Position[order, n][[1, 1]]},
If[i =!= 1, order[[i - 1 ;; i]] = Reverse[order[[i - 1 ;; i]]]]
];
MoveDown[n_] := With[{i = Position[order, n][[1, 1]]},
If[i =!= Length[order],
order[[i ;; i + 1]] = Reverse[order[[i ;; i + 1]]]]
];
list = {#, Button["Up", MoveUp[#]], Button["Down", MoveDown[#]]} & /@
order;
Dynamic[Grid[list[[order]]]]