Laden...

datenbank wird in ComboBox ungewollt umsortiert

Erstellt von prom vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.070 Views
P
prom Themenstarter:in
187 Beiträge seit 2008
vor 15 Jahren
datenbank wird in ComboBox ungewollt umsortiert

ich lade eine Datenbank in mein Programm (Access), welche eine Datumsspalte hat.
Diese lese ich aus und füge sie einer ComboBox hinzu.
Dabei wird diese Spalte aber ungewollt sortiert (ComboBox-Sortierung ist ausgeschalten).

Solange nur Daten mit dem Jahr 2008 in der DB waren, gab es keine Probleme. Doch jetzt mit 2009 drinnen sortiert er die irgendwie...

Bsp.: Reihenfolge in der DB:
14.04.08
14.05.08
14.06.08
14.07.08
14.08.08
01.01.09
02.01.09

=> daraus macht er beim einlesen folgendes
14.04.08
01.09.09
02.09.09

... rest wieder richtig

Woran kann das denn liegen?

Eingelesen wird wie folgt:

private void loadData()
        {
            try
            {
                // Create a new data adapter based on the specified query.
                dataAdapter = new OleDbDataAdapter("select * from Werte", connectionString);

                // Create a command builder to generate SQL update, insert, and
                // delete commands based on selectCommand. These are used to
                // update the database.
                OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder();
                commandBuilder.QuotePrefix = "[";
                commandBuilder.QuoteSuffix = "]";
                commandBuilder.DataAdapter = dataAdapter;

                table = new DataTable();
                dataAdapter.Fill(table);

                // bind combo
                cbDates.DataSource = table;
                cbDates.DisplayMember = "Datum";
            }
            catch (OleDbException ex)
            {
                MessageBox.Show("Es ist ein Fehler mit der Datenbank aufgetreten!\n\n" +
                    "Fehlermeldung:\n" + ex.Message);
            }
        }
1.457 Beiträge seit 2004
vor 15 Jahren

Wieso sortierst du das Ergebnis nicht selber in deiner SQL Anweisung?

P
prom Themenstarter:in
187 Beiträge seit 2008
vor 15 Jahren

ich zeige immer nur eine Datenreihe an - in Textboxen...
und die ComboBox dient dazu, zwischen den Datensätzen zu wechseln.

Wenn ich jetzt die Daten reinlade und die ComboBox binde, möchte ich gerne direkt durch den Index der Combobox auch den Index des Datensatzes erhalten.

Das würde ja auch gehen, wenn er die Daten 1:1 reinlädt ohne die Zeilen zu vertauschen.

Ich würde gerne wissen, WIESO er das macht...

PS: Für's erste habe ich jetzt ein order by Id hinzugefügt... -> daran hatte ich garnicht gedacht...

PPS: Gerade ist mir aufgefallen, dass das eh besser ist für mich. Also Danke

915 Beiträge seit 2006
vor 15 Jahren

Hrm, du musst die Typen schon zuordnen nur mit einlesen ists nicht getan vorallem wenn es der falsche ist .-)

Du hast sehr wahrscheinlich in deiner Datenbank in der Tabelle für deine Datumswerte den Datentyp "TEXT" verwendet. Und das wird als string interpretiert, daher kann er logischerweise nicht korrekt sortieren - da er Alphanumerisch nunmehr vorgeht.

"1"
"11"
"12
"13"
...
"2"
"21"
"22"
...
usw...

Du kannst entweder den korrekten Datenbanktypen angeben also umstellen von "Text" auf "Datum/Uhrzeit", was das gescheiteste wäre. Oder den Datentyp nachträglich ändern über <DataTable>.Columns["<SpaltenName>"].DataType = typeof(DateTime); (was gehen sollte..) oder du schreibst einen <DataTable>.DefaultView.Sort indem die Spalte den Typ Datum anpasst... oder wandelst innerhalb deines Querys (dein SELECT Statment) den nvarchartypen via CAST()oder CONVERT() von nvarchar auf den Datentypen "Datum/Uhrzeit" um (irgendeines von beiden ging glaube ich bei OleDB nicht).

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

P
prom Themenstarter:in
187 Beiträge seit 2008
vor 15 Jahren

wenn ich's nicht besser wüsste, hätte ich das auch gesagt.
Aber ich habe den Datentyp Datum für die Datumssplalte...

Ich habe eine Spalte ID, mit Autowert und PrimaryKey.
Dann eine Datum/Uhrzeit-Spalte, eine Memo-Splate und sonst nur Zahl(double)-Splaten...

und diese annahme mit der Ordnung die du da geschrieben hast, wegen interpretation der Datum-Splate als Text-Spalte kann gar nicht stimmen, denn

14.04.08
01.09.09

ist ja nicht gerade numerisch geordnet, oder?

Aber danke für den Tipp, aber daran liegt's leider nicht...

Ich weiß ja nicht einmal wonach er das ganze ordnet -> er sollte ja eigentlich garnichts umordnen, oder?

915 Beiträge seit 2006
vor 15 Jahren

Hrm, schade hätte darauf wetten können. Tjor, normal sollte er eigentlich nicht umsortieren wenn man sonst nichts angibt. Bleibt ja noch die Möglichkeit mit <DataTable>.DefaultView.Sort das ganze zu sortieren, damit es wieder passt. Wundern tut es mich aber ehrlich gesagt schon.

Schau dir trotzdem mal die <DataTable>.Columns["<SpaltenName>"].DataType an, ob da wirklich DateTime drinnen steht..

Wie Alphanumerisch mit strings die irendwelche "." zwischendrinnen besitzen sortiert aussehen weis ich nicht. Kann sein das 01.09 kleiner als 14.05.08 ist aus irgendeinen Grund.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

F
10.010 Beiträge seit 2004
vor 15 Jahren

Mich wundert es nicht.

Jedesmal, wenn Du eine Sql-Einleitung in die Hand nimmst, wird da auch irgendwo stehen,
das die Rückgabe nur dann sortiert ist, wenn du sie explizit sortiert anforderts.
Ansonsten liefert der Server die Daten in einer "beliebigen" reihenfolge.

Das ist so, das musst Du so als gegeben hinnehmen.

915 Beiträge seit 2006
vor 15 Jahren

Hrm, stimmt, habe das SQL Statement gar nicht angesehen: "select * from Werte"...
Schreib einfach dein Stamenet um... "... ORDER BY <SpaltenName> ASC" oder DESc wenn es vom letzten Datum ausgehen soll.

Bin irgendwie davon ausgegangen das dass schon drinnen wäre 😉

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

P
prom Themenstarter:in
187 Beiträge seit 2008
vor 15 Jahren

das order by habe ich jetzt eh drin.
Hätte nur gedacht, dass er beim einlesen eine Reihe nach der anderen einliest...
Jetzt weiß ich aber, dass es einfach nicht so ist...

Danke für eure Hilfe