Laden...

Best Practice Sortierung

Erstellt von Kriz vor 2 Jahren Letzter Beitrag vor 2 Jahren 365 Views
K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 2 Jahren
Best Practice Sortierung

Servus,

folgender Sachverhalt:
Eine List hat x Elemente mit der Property Sortierung

Beispiel:
ItemA - Sortierung:1
ItemB - Sortierung:2
ItemC - Sortierung:3
ItemD - Sortierung:4
ItemE - Sortierung:5
ItemF - Sortierung:6

Nun soll die Property Sortierung von ItemE zwischen Item B und ItemC eingefügt werden:

ItemA - Sortierung:1
ItemB - Sortierung:2
ItemC - Sortierung:4
ItemD - Sortierung:5
ItemE - Sortierung:3
ItemF - Sortierung:6

Also quasi "Verschiebe ItemE VOR ItemC"
Mein Ansatz wäre nun dass das zu verschiebende Item (ItemE) die Sortierung-Property von ItemC bekommt und bei alle folgenden Items die Sortierung Property um 1 erhöht wird, bis zum ursprünglichen Platz von ItemE.

Das wirkt mir allerdings irgendwie umständlich. Gäbe es da noch einen anderen Ansatz?
Also ich möchte keinen Code, den kann ich mir selber schreiben. Mir geht es darum, den Ansatz den ich habe, zu optimieren.

Es geht darum, dem Nutzer eine Möglichkeit zu geben, Artikel so zu sortieren, wie er es braucht.

Danke schon im Vorraus!

T
2.219 Beiträge seit 2008
vor 2 Jahren

Wie werden den die Artikel sortiert?
Wenn es per Drag&Drop gemacht wird, kannst du beim Drop i.d.R. ein Event abonnieren.
Dort bekommst du dann den Index (Alt/Neu) aus den Event Args nehmen und die Liste der Artikel umsortieren.
Dazu musst du nur in der Artikel Liste die Einträge entfernen und per Insert an der richtigen Stelle einfügen.
Die Property kannst du dann mit einer einfachen for Schleife neu durchzählen lassen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

3.825 Beiträge seit 2006
vor 2 Jahren

Wenn Du die Artikel in einer ListView anzeigst kannst Du den ListViewItemSorter nehmen, der Anwender kann dann auf einen Spaltentitel klicken und die Liste wird danach sortiert.
So wie man es von allen Windows Programmen gewöhnt ist. Beim zweiten Klick auf die Spalte wird dann umgekehrt sortiert.

Sortieren von ListView mithilfe einer Spalte in C # - C#

Neue Artikel einfach am Ende einfügen und dann die Liste neu sortieren. Das ist einfacher als beim Einfügen den richtigen Platz zu suchen.

Wenn Du einen Sortieralgorithmus selber implementieren willst schau nach Bubble Sort. Das geht im Speichern recht fix.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 2 Jahren

Es geht um eine Xamarin App. Dort werden die Artikel nacheinander angezeigt. Also erst der Artikel mit der Sortierung 1, der wird dann bearbeitet, gespeichert und dann kommt der nächste Artikel und so weiter. Also nicht in einer Listview, sondern jeder Artikel ist an eine ContentPage gebunden.
Nun hat der Nutzer die Möglichkeit einen Artikel von Position 8 auf Position 3 zu verschieben. Dafür öffnet sich ein PopUp, "Verschiebe den Artikel "Milch" hinter den Artikle ..." dort kann dann die Artikelnummer oder der Artikelname eingegeben werden und der Nutzer kann den Artikel dann auswählen, der als Ziel genommen werden soll.
Das muss dann auch gespeichert werden (deswegen als Property), damit die Sortierung auch beim nächsten Start der App noch vorhanden ist.

Also es geht nicht darum, wie ich die Liste sortieren kann, sondern ob es für das Umsortieren eine andere Möglichkeit gibt, als eingangs erwähnt.

T
2.219 Beiträge seit 2008
vor 2 Jahren

Wenn du einen Artikel nur noch oben schieben kannst, dann würde dein jetziger Ansatz vermutlich reichen.
Es kann aber auch den Fall geben, wenn ich einen Artikel umgekehrt nach unten verschiebe.
Dann funktioniert der Ansatz nicht mehr.

Im einfachsten Fall macht du es wie oben beschrieben.

  1. Liste der Artikel einladen
  2. Artikel innerhalb der Liste verschieben (Remove/Insert)
  3. Per for Schleife die Sortierspalte neu befüllen mit der Laufvariable der for Schleife.

Dadurch hast du auch beide Sortierungsrichtungen abgedeckt.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 2 Jahren

Ja genau, das klingt sinnvoller, danke fuer den Tip!

C
2.121 Beiträge seit 2010
vor 2 Jahren

Wenn nur verschoben und nicht eingefügt/gelöscht wird, musst du beim Verschieben nur die Sortierungen vom Einfügepunkt bis zum Endpunkt anpassen.
for i von Min(Anfangsposition, Endposition) bis Max(Anfangsposition, Endposition) setze Sortierwert = i