Ceci est un problème classique et la réponse est simple: si vous voulez déplacer l'élément 3 en position 2, vous devez d'abord changer la colonne de tri de 2 en un nombre temporaire (par exemple 99). Donc, il va comme ceci:
Move 2 to 99
Move 3 to 2
Move 99 to 3
Vous devez être prudent, cependant, que votre valeur temporaire est jamais utilisé dans le traitement normal et que vous respectez plusieurs threads le cas échéant.
Mise à jour: BTW - une façon de traiter avec les « utilisateurs multiples peut changer l'ordre » problème est de faire ce que je fais: donner à chaque utilisateur un ID numberical puis ajouter ceci au numéro temporaire (mon personnel ID est en fait l'ID du champ Identité unique de la table de personnel utilisée pour ouvrir les connexions). Ainsi, par exemple, si vos positions ne seront jamais négatives, vous pouvez utiliser -1000 - UserID comme valeur temporaire. Croyez-moi sur une chose cependant: vous faites pas voulez juste supposer que vous n'aurez jamais une collision. Si vous pensez que cela et fait se produisent, il sera extrêmement difficile de déboguer! GUZ signale que ses utilisateurs ont peut-être réorganisé un ensemble d'éléments de campagne et les ont soumis en tant que lot. Il ne s'agit pas simplement d'un changement de deux enregistrements. Vous pouvez aborder cela de deux façons, alors. Tout d'abord, vous pouvez changer les champs de tri existants de l'ensemble en un nouvel ensemble de valeurs non-collision (par exemple -100 - (staffID * maxSetSize) + existingOrderVal), puis enregistrez chaque enregistrement et changez chaque enregistrer à la nouvelle valeur de la commande. Ou vous pourriez essentiellement le traiter comme un tri à bulles sur un tableau où la valeur orderVal est l'équivalent de votre index de tableau. Soit cela vous semble logique (et c'est évident), soit vous devez vous en tenir à la solution 1 (ce qui est plus facile dans tous les cas).
J'étais sur le point de poster cette réponse. Battez-moi par 30 (ish) secondes. – AllenG
@AllenG - Je vous entends ... Je ne peux pas vous dire combien de fois j'ai appuyé sur le bouton Soumettre seulement pour trouver que j'ai été battu au coup de poing. Il y a un peu de pression sur le SO. –
Le problème est qu'un utilisateur peut faire de nombreux changements dans la portée de l'ordre des détails, puis ces modifications sont enregistrées dans un lot. – GUZ