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
DataTables simpel sortieren
FrozenLord
myCSharp.de - Member



Dabei seit:
Beiträge: 7

Themenstarter:

DataTables simpel sortieren

beantworten | zitieren | melden

Beschreibung:

Eine Methode, die eine übergebene DataTable nach einer wählbaren Spalte sortiert. Dazu wird die .Net DataTable.Sort-Methode verwendet. (Man spart also einiges an Zeilen und Zeit)


public DataTable Listensortierer(DataTable dt)
        {
            DataTable dtt = new DataTable();            //Erstellt eine leere Hilfs-Tabelle

            dt.DefaultView.Sort = "SORT DESC";    //Sortiert die "SORT"-spalte, absteigende Reihenfolge
            dtt = dt.DefaultView.ToTable();         //Leere Hilfs-Tabelle wird gefüllt
            dt = dtt;                               //Leere Tabelle wird auf alte Tabelle abgebildet
            return dt;
        }

Schlagwörter: <DataTable Methode Sort sortieren DefaultView>

Verwendung:

Einfach in einem Programm einfügen und die Tabelle (als Beispiel nennen wir sie mal DT) so sortieren lassen:

DT = Listensortierer(DT);

Das SORT in der Methode muss durch die Spaltenbezeichung ersetzt werden!!
Die Sortierrichtung ist momentan absteigend (=DESC). Um aufsteigend zu sortieren, einfach das DESC durch ASC ersetzen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von FrozenLord am .
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Wäre es nicht besser, gleich die Spalte und die Sortierreihenfolge mitanzugen?
Dann könnte man auch schön mit einer Überladung arbeiten, so z.B.:

        public DataTable Listensortierer(DataTable dt, string column)
        {
            return Listensortierer(dt, column, false);
        } 

        public DataTable Listensortierer(DataTable dt, string column, bool descending)
        {
            DataTable dtt = new DataTable();            //Erstellt eine leere Hilfs-Tabelle

            dt.DefaultView.Sort = String.Format("{0} {1}", column, descending ? "DESC" : "ASC");    //Sortiert die "SORT"-spalte, absteigende Reihenfolge
            dtt = dt.DefaultView.ToTable();         //Leere Hilfs-Tabelle wird gefüllt
            dt = dtt;                               //Leere Tabelle wird auf alte Tabelle abgebildet
            return dt;
        } 

lg Lion
lg Lion
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10083

beantworten | zitieren | melden

Und wozu dies?
Man kann doch gleich den DataView benutzen, und braucht die Daten nicht
zu verdoppeln.
private Nachricht | Beiträge des Benutzers
FrozenLord
myCSharp.de - Member



Dabei seit:
Beiträge: 7

Themenstarter:

beantworten | zitieren | melden

Dann sieht die Methode jetzt komplett so aus:

public DataTable Listensortierer(DataTable dt, string column, string sort)
        {
            dt.DefaultView.Sort = column + " " + sort;      //Sortiert die SORTspalte, sort = Reihenfolge
                                                            //ASC = aufsteigend, DESC = absteigend    
            dt = dt.DefaultView.ToTable();                  //Leere Hilfs-Tabelle wird gefüllt
            return dt;
        }

wobei die Verwendung dann so erfolgt:

DT = Listensortierer(DT, "Spalte", "DESC");

für absteigende Reihenfolge, bzw:

DT = Listensortierer(DT, "Spalte", "ASC");

für aufsteigende Reihenfolge.

Danke für die Tipps :-)
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von FrozenLord am .
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

damit erstellst du nachwievor jedes mal eine kopie der daten. das ist nicht nur speicherverschwendung sondern auch problematisch, wenn der inhalt mit dem original anfängt zu differenzieren, weil man irgendwo doch noch ein binding hat....