Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Best Practice Sortierung
Kriz
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

Best Practice Sortierung

beantworten | zitieren | melden

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!
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Kriz am .
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1919
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3795
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Kriz
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1919
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am .
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.
private Nachricht | Beiträge des Benutzers
Kriz
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

beantworten | zitieren | melden

Ja genau, das klingt sinnvoller, danke fuer den Tip!
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2143

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers