DataTable Sortierung nach Datum

Die Programmiersprache C# und Programmierung im .NET Framework/Mono
Antworten
sukka
Beiträge: 42
Registriert: Do Jul 17, 2008 7:49 pm

DataTable Sortierung nach Datum

Beitrag von sukka » Do Nov 25, 2010 6:39 pm

Hallo liebe Leute,

folgendes Problem, bei dem ich grad so ein wenig die Segel streiche.
Ich befülle eine DataTable mit String und DateTime, String ist Spalte 1 und DateTime ist Spalte 2. Jetzt würde ich das ganze gern sortieren. Also hole ich mir den DefaultView und lasse diesen sortieren und schreibe mir die sortierten Werte wieder zurück in meine DataTable...
Aber ausgegeben wird mir wieder die Ursprungsliste. Kann mir jemand weiterhelfen?

Code: Alles auswählen

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace testprojekt
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable myTable = new DataTable("Testdatenbank");

            myTable.Columns.Add("Name", typeof(String));
            myTable.Columns.Add("Datum", typeof(DateTime));
            myTable.Rows.Add("Name1", DateTime.Parse("01.10.2010"));
            myTable.Rows.Add("Name2", DateTime.Parse("01.11.2010"));
            myTable.Rows.Add("Name3", DateTime.Parse("01.01.2010"));
            myTable.Rows.Add("Name4", DateTime.Parse("01.09.2010"));
            DataView myView = myTable.DefaultView;

            Console.WriteLine("Vor der Sortierung:");
            foreach (DataRow row in myTable.Rows)
            {
                foreach (DataColumn column in myTable.Columns)
                {
                    Console.Write(row[column] + " ");
                }
                Console.WriteLine();
            }
            myView.Sort = "Datum ASC";
            DataTable myTable1 = myView.Table;

            Console.WriteLine("Nach der Sortierung: ");
            foreach (DataRow row in myTable1.Rows)
            {
                foreach (DataColumn column in myTable1.Columns)
                {
                    Console.Write(row[column] + " ");
                }
                Console.WriteLine();
            }
            Console.Write("Weiter mit beliebiger Taste");
            Console.ReadLine();
        }
    }
}
lieben Gruß,

Sukka

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: DataTable Sortierung nach Datum

Beitrag von Xin » Do Nov 25, 2010 7:45 pm

sukka hat geschrieben:

Code: Alles auswählen

            myView.Sort = "Datum ASC";
Die Zeile kommt mir spanisch vor und Du programmierst C#.

War das die DataColumn (Spalte) oder wenigstens der Spaltenname? "Datum ASC" gibt es nicht als Spaltenname.
Ascending bzw. Descending war soweit ich weiß in einem anderen Property gegeben. Ich kann morgen mal gucken, wie wir das gelöst haben. Ich habe hier derzeit kein C#.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

sukka
Beiträge: 42
Registriert: Do Jul 17, 2008 7:49 pm

Re: DataTable Sortierung nach Datum

Beitrag von sukka » Fr Nov 26, 2010 10:15 am

Der Spaltenname und die Sortierung werden durch einen Whitespace voneinander getrennt, in C# läuft sehr viel über diese Art von Strings

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: DataTable Sortierung nach Datum

Beitrag von Xin » Fr Nov 26, 2010 10:34 am

sukka hat geschrieben:Der Spaltenname und die Sortierung werden durch einen Whitespace voneinander getrennt, in C# läuft sehr viel über diese Art von Strings
Das kenne ich anders. Ist mir bei ADO.NET früher nicht aufgefallen, das hier scheint vorrangig darauf aus zu sein, an ODBC durchgereicht zu werden.
ADO.NET ist bei mir aber auch schon wieder 6 Jahre her.

Diese Art von Strings findest Du in SQL.

Kann es sein, dass DateTimes nicht der richtige Vergleich zu finden ist - was passiert, wenn Du nach Name sortieren lässt?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

sukka
Beiträge: 42
Registriert: Do Jul 17, 2008 7:49 pm

Re: DataTable Sortierung nach Datum

Beitrag von sukka » Di Nov 30, 2010 10:28 pm

Ok, Fehler gefunden.
Es liegt an 2 Buchstaben...

anstatt

Code: Alles auswählen

DataTable myTable1 = myView.Table;
muss

Code: Alles auswählen

DataTable myTable1 = myView.ToTable();
dastehen, dann funktionierts auch mit dem Nachbarn

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: DataTable Sortierung nach Datum

Beitrag von Xin » Di Nov 30, 2010 10:29 pm

wtf?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

sukka
Beiträge: 42
Registriert: Do Jul 17, 2008 7:49 pm

Re: DataTable Sortierung nach Datum

Beitrag von sukka » Di Nov 30, 2010 11:32 pm

Das DataView.Table; holt sich die Originaltabelle, aus der die Ansicht ursprünglich mal erstellt wurde. Also wird das Sort ignoriert.
das DataView.ToTable() erstellt aus dem View eine neue Tabelle, wenn also der View sortiert wurde, was ja mit DataView.Sort geschehen ist, dann wird die sortierte Tabelle in die neue Tabelle geschrieben. Willkommen in der lustigen Welt von Microsoft...

Liebe Grüße,

Sukka

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: DataTable Sortierung nach Datum

Beitrag von Xin » Mi Dez 01, 2010 12:21 am

sukka hat geschrieben:Willkommen in der lustigen Welt von Microsoft...
Naja, das ist eigentlich halbwegs logisch, ich hätte dem View vielleicht ein Interface verpasst, dass es sich als Tabelle verhält und "Table" als "Source" bezeichnet.

Danke, dass Du die Lösung noch gepostet hast - ich kam die letzten Tage nicht dazu, C# anzuwerfen, bin mit Refactoring (dass ich so nicht nennen darf, deswegen heißt es Aufräumen, das ist derzeit akzeptiert) beschäftigt und bin gar nicht richtig dazugekommen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

sukka
Beiträge: 42
Registriert: Do Jul 17, 2008 7:49 pm

Re: DataTable Sortierung nach Datum

Beitrag von sukka » Mi Dez 01, 2010 8:11 am

Mit "Source" wäre ich vermutlich niemals in diese Probleme gelaufen oder auch mit SourceTable, damit ist eine Abgrenzung klar und eindeutig.

Antworten