Il problema che ho è questo: ho una lista di elementi. Ogni elemento ha più proprietà. Ho una vista in cui visualizzo tutti gli elementi e ho una vista in cui visualizzo gli articoli in base ai valori nelle proprietà. Ora, vorrei consentire all'utente di ordinare gli elementi (trascinamento). Quando gli utenti ordinano gli elementi nella vista che li visualizza tutti (nessun filtro), tutto va bene, ma poi quando selezionano un filtro, cambiano l'ordine mentre sono nel filtro e rimuovono il filtro - le cose si incasinano perché il numero dell'ordine mentre con filtro non corrisponde a quello senza filtro.
Il mio pensiero era di incrementare il valore dell'ordine di 10000 e posizionare sempre l'oggetto nel punto in cui era rimasto. Quindi, se lascio un articolo 4 con Order 40000 tra gli articoli 2 e 3, il nuovo ordine per l'articolo 4 sarà 25000. In questo modo anche se ho un filtro attivato e gli elementi mancano dall'elenco e l'elenco è riordinato, il cambiamento di ottenere lo stesso numero d'ordine dopo aver rimosso il filtro è piccolo.
Esempio:
Elenco completo:
Item 1 - 10000
Item 2 - 20000
Item 3 - 30000
Item 4 - 40000
Item 5 - 50000
Elenco filtrato:
Item 1 - 10000
Item 2 - 20000
Item 4 - 40000
Elenco filtrato riordinato:
Item 1 - 10000
Item 4 - 15000
Item 2 - 20000
Elenco completo riordinato:
Item 1 - 10000
Item 4 - 15000
Item 2 - 20000
Item 3 - 30000
Item 5 - 50000
Ora, se sposto di nuovo l'Articolo 2 sopra l'elemento 4, l'Oggetto 2 otterrà 12500. Il problema che sto vedendo è che se continui a mescolare due oggetti, molto presto finirà i punti vuoti e sarà 1 (arrotondato). Sembra che ciò accada dopo 14 cambi di ordine di due elementi che sono uno accanto all'altro. (log base 2 di 10000).
Hai qualche idea su quale sarebbe un approccio migliore per risolvere questo problema? Stavo anche pensando di memorizzare PreviousItemId e NextItemId su ciascun elemento e ricalcolare su ogni cambio di posizione.