Laden...

DataTables simpel sortieren

Erstellt von FrozenLord vor 15 Jahren Letzter Beitrag vor 15 Jahren 14.347 Views
F
FrozenLord Themenstarter:in
7 Beiträge seit 2009
vor 15 Jahren
DataTables simpel sortieren

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.

L
770 Beiträge seit 2006
vor 15 Jahren

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

F
10.010 Beiträge seit 2004
vor 15 Jahren

Und wozu dies?
Man kann doch gleich den DataView benutzen, und braucht die Daten nicht
zu verdoppeln.

F
FrozenLord Themenstarter:in
7 Beiträge seit 2009
vor 15 Jahren

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 😃

Gelöschter Account
vor 15 Jahren

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....