Seite 1 von 1

DataTable Sortierung nach Datum

Verfasst: Do Nov 25, 2010 6:39 pm
von sukka
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

Re: DataTable Sortierung nach Datum

Verfasst: Do Nov 25, 2010 7:45 pm
von Xin
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#.

Re: DataTable Sortierung nach Datum

Verfasst: Fr Nov 26, 2010 10:15 am
von sukka
Der Spaltenname und die Sortierung werden durch einen Whitespace voneinander getrennt, in C# läuft sehr viel über diese Art von Strings

Re: DataTable Sortierung nach Datum

Verfasst: Fr Nov 26, 2010 10:34 am
von Xin
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?

Re: DataTable Sortierung nach Datum

Verfasst: Di Nov 30, 2010 10:28 pm
von sukka
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

Re: DataTable Sortierung nach Datum

Verfasst: Di Nov 30, 2010 10:29 pm
von Xin
wtf?

Re: DataTable Sortierung nach Datum

Verfasst: Di Nov 30, 2010 11:32 pm
von sukka
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

Re: DataTable Sortierung nach Datum

Verfasst: Mi Dez 01, 2010 12:21 am
von Xin
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.

Re: DataTable Sortierung nach Datum

Verfasst: Mi Dez 01, 2010 8:11 am
von sukka
Mit "Source" wäre ich vermutlich niemals in diese Probleme gelaufen oder auch mit SourceTable, damit ist eine Abgrenzung klar und eindeutig.