Ich befürchte, das dein Versuch schon im Ansatz scheitert.
Das
DB-Grid ist datensensitiv. Es stellt die Datensätze in der Reihenfolge dar, in der sie aus der
DB abgerufen wuden. Die Sortierung kann man nur durch Indizies und/oder verändertem Datenabruf beeinflussen.
Um die Position eines einzelnen Datensatzes individuell zu verändern, musst du den Daten selbst verändern.
Eine Variante wäre z.B., das du ein Feld "TimeStamp" zu der entsprechenden Tabelle hinzufügst und nach diesem sortierst. Wenn jetzt ein Datensatz verschoben werden soll, dann setzt du dessen TimeStamp auf (TimeStamp des Datensatzes an der Zielposition) - 1 Millisekunde.
Bei neuen Datensätzen setzt du TimeStamp := now, damit diese standardmäßig unten stehen ...