Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - dataset sortieren
Chiyoko - Sa 08.05.10 13:44
Titel: dataset sortieren
Huhu,
ein weiteres Problem liegt an.
Ich wuerde gerne mein dataset sortieren und habe schon einige Wege versucht.
Ich moechte es sortieren, bevor es im Datagridview angezeigt wird, da ich es fuer etwas anderes benoetige.
Ich habe einige Spalten in meiner Datanebank, darunter eine Spalte namens "ID".
Probiert habe ich folgendes:(beim laden der Form)
Wie ich gelesen habe, funktioniert das bei vielen nicht.In der mdb selbst ist alles sortiert.
C#-Quelltext
1: 2: 3: 4:
| DataView myDataView = datat.Table[0].DefaultView; myDataView.Sort = "coulmName DESC";
|
Wenn ich es nicht funktioniert, nehme ich Xml..aber warum, wenn die Daten schon in der mdb vorliegen, die ich eh benutze?!
JüTho - Sa 08.05.10 14:12
Chiyoko hat folgendes geschrieben : |
| In der mdb selbst ist alles sortiert. |
Das ist ein Irrtum. Eine Datenmenge ist immer unsortiert; du hast keinen Einfluss darauf, ob ein neuer Datensatz in eine Lücke am Anfang oder in der Mitte eingefügt oder am Ende angehängt wird. Auch Änderungen können immer wieder an anderen Stellen landen.
Die Sortierung ergibt sich grundsätzlich durch ORDER BY im SELECT-Befehl.
Chiyoko hat folgendes geschrieben : |
Probiert habe ich folgendes:(beim laden der Form)
Wie ich gelesen habe, funktioniert das bei vielen nicht. |
"bei vielen"? Unter welchen Umständen soll das nicht funktionieren?
Das ist einer der Standardwege; die sortierte DataView muss ggf. als DataSource verwendet werden. (Aber bei der DefaultView sollte es auch "by default" funktionieren.)
Chiyoko hat folgendes geschrieben : |
| Wenn ich es nicht funktioniert, nehme ich Xml. |
Den Zusammenhang sehe ich überhaupt nicht. Wieso sollte Xml besser sortiert sein als die mdb-Inhalte? Und wenn du eine andere Sortierung haben willst?
Gruß Jürgen
Chiyoko - Sa 08.05.10 15:23
| Zitat: |
Die Sortierung ergibt sich grundsätzlich durch ORDER BY im SELECT-Befehl.
|
Hab ich nicht zur Verfuegung.Laut Galileo soll man es u.a. so machen:
http://openbook.galileocomputing.de/visual_csharp/visual_csharp_28_006.htm#mj6865fc62f09928c4b9891f68a2b5d4c0
(Was auch nicht funktioniert.)
C#-Quelltext
1:
| DataRow[] rows = tbl.Select("", "UnitPrice DESC"); |
Die ID in der mdb bzw im dataset steht auf Int16, also beides das selbe Format.
Ich habe einen Button.Wenn ich auf diesen Button klicke, erhoeht sich im Label
eine Zahl um 1 bei jedem Klick.Wenn die ID der Zahl im lv entspricht, traegt sich die jeweilige Zahl in der Zeile der ID in ein weiteres label ein.
C#-Quelltext
1: 2:
| Int16 lv_ergebnis = Convert.ToInt16(lbl_level.Text); double exptabelle_csro = Convert.ToDouble(db1DataSet.Exptabelle[lv_ergebnis +1].Csro_exp); |
Das ist der Grund, wieso ich auf das Dataset zugreifen muss, und kein Datagridview nehmen kann.
Was Xml angeht: Wenn ich das ueber eine foreach iteration laufen lasse, kann ich immer sicher sein, die richtige ID in der richtigen Reihenfolge zu haben.(Jedenfalls hat ich damit nie probleme).
Sortierung: Ich brauche nur die ID sortiert,...wobei ich auch versucht habe, alle Spalten auf Int16 umzuwandeln.Aber dies bringt genauso wenig.
JüTho - Sa 08.05.10 16:34
Ach je, immer dieses Halbwissen, bei dem verschiedene Sachen vermischt werden.
| JüTho hat folgendes geschrieben: |
| Die Sortierung ergibt sich grundsätzlich durch ORDER BY im SELECT-Befehl. |
Chiyoko hat folgendes geschrieben : |
C#-Quelltext 1:
| DataRow[] rows = tbl.Select("", "UnitPrice DESC"); | |
Ich habe
SELECT angegeben, du hast
Select benutzt. Das sind zwei verschiedene Dinge:
- SELECT ist der SQL-Befehl, mit dem Daten aus der Datenbank in die DataTable geholt werden. Zu dessen Syntax passt ORDER BY.
- Select ist der DataTable-Befehl zur Auswahl. Der braucht die Syntax, wie sie in DataColumn.Expression angegeben ist.
- Sort ist die DataView-Festlegung zum Sortieren. Der braucht dieselbe Syntax. Bitte beachte auch, dass es sich hier nicht um eine Methode, sondern um eine Eigenschaft handelt.
Chiyoko hat folgendes geschrieben : |
| Das ist der Grund, wieso ich auf das Dataset zugreifen muss, und kein Datagridview nehmen kann. |
Wenn du als Programmierer die Daten beeinflussen willst, solltest du sowieso DataSet/DataTable usw. bearbeiten und nicht das DataGridView. (Das darf trotzdem per DataSource angehängt werden...)
Den Zusammenhang der weiteren Anmerkungen mit dem Sortier-Problem kann ich überhaupt nicht erkennen. Ebenso vermisse ich noch die Erklärung, warum oder wie dein Versuch mit DataView.Sort nicht funktionieren soll.
Nach der Installation eines neuen Rechners habe ich noch nicht alle Daten herübergeholt; deshalb kann ich nicht "auf die Schnelle" eine xml-Datei mit geeigneter Struktur und eine Beispielanwendung bauen.
Insofern muss ich dich jetzt allein lassen. Gruß Jürgen
Th69 - Sa 08.05.10 17:06
Hallo Chiyoko,
du schreibst, du hast eine Spalte namens "ID", präsentierst aber diesen Code:
C#-Quelltext
1:
| myDataView.Sort = "coulmName DESC"; |
Hast du denn bei dir dann den richtigen Spaltennamen "ID" angegeben, d.h.
C#-Quelltext
1:
| myDataView.Sort = "ID DESC"; |
???
Chiyoko - Sa 08.05.10 20:09
@JüTho
- liegt vielleicht daran, das ich SQL nicht mag...aber was muss, das muss....
Auf jedenfall vielen Dank fuer die Aufklaerung.
| Zitat: |
Den Zusammenhang der weiteren Anmerkungen mit dem Sortier-Problem kann ich überhaupt nicht erkennen. Ebenso vermisse ich noch die Erklärung, warum oder wie dein Versuch mit DataView.Sort nicht funktionieren soll.
|
Genau darum fragte ich ja, wieso das nicht geht^^Ich weis es nicht, warum das nicht funktioniert...
Hat es vielleicht mit dem Format der Spalten zu tun?(Format in der Accessdatenbank, Format im Dataset.)Zumindest habe ich darueber mal was gelesen.
Aber irgendwann wird das schon funktionieren, bisher war alles nur eine Frage der Zeit.
@Th69
1) Das ist ein Beispiel.Tausche einfach "coulmName DESC" gegen "ID DESC" aus^^
Es sollte das ganze nur veranschaulichen.
| Zitat: |
Hast du denn bei dir dann den richtigen Spaltennamen "ID" angegeben, d.h.
|
Devinitiv:)
Kha - Sa 08.05.10 20:53
Chiyoko hat folgendes geschrieben : |
Ich habe einen Button.Wenn ich auf diesen Button klicke, erhoeht sich im Label
eine Zahl um 1 bei jedem Klick.Wenn die ID der Zahl im lv entspricht, traegt sich die jeweilige Zahl in der Zeile der ID in ein weiteres label ein. |
Wie du eine Zeile anhand ihrer ID findest, hast du doch selbst schon verlinkt:
DataRowCollection.Find. Sortiert werden muss dazu nichts.
Chiyoko - Sa 08.05.10 21:13
Hehe, nein...ich brauche sie nicht nur einzeln.Aber danke.
Soeben hab ich es ueber eine Schleife getestet.Und es wird mir 0-99 ausgegeben...
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| DataView myDataView = db1DataSet.Tables["Exptabelle"].DefaultView; myDataView.Sort = "ID DESC";
for (int i = 0; i < myDataView.Count; i++) { MessageBox.Show(i.ToString()); } } |
Wobei das vielleicht nicht unbedingt elegant ist...
JüTho - So 09.05.10 10:37
Chiyoko hat folgendes geschrieben : |
| Soeben hab ich es ueber eine Schleife getestet.Und es wird mir 0-99 ausgegeben... |
Was soll das denn beweisen? :lol: Du lässt dir doch nur den Zähler der for-Schleife anzeigen, aber nichts aus der DataView. Du willst eher die Daten kontrollieren (aus der MSDN kopiert, nämlich dem Beispiel zu DataView):
C#-Quelltext
1: 2: 3: 4:
| for(int i = 0; i < myDataView.Count; i++) { Console.WriteLine(myDataView[i]["ID"]); } |
Jürgen
Chiyoko - So 09.05.10 13:08
Ja hab ich gestern auch noch bemerkt^^
Bringt ja nichts...
Ich hab jetzt versucht, die jeweiligen Steuerelemente ans Dataset zu haengen,
und ueber die bindingsource find methode Daten auszulesen.
Wenn ich jetzt die jeweilige Zelle im datagridview anklicke, wird mir das richtige ausgegeben.
C#-Quelltext
1:
| exptabelleBindingSource.Find("ID", lv_ergebnis); |
Aber diese Methode ist auch nicht gut, da man jetzt eine Moeglichkeit brauch, die Daten im dataset zu selektieren(oder wie auch immer).
| Zitat: |
Du willst eher die Daten kontrollieren (aus der MSDN kopiert, nämlich dem Beispiel zu DataView):
|
Genau:p..ich sollte mal ein par (virtuelle) Baeume abholzen.
Chiyoko - So 09.05.10 15:01
Ich geb es auf, ...bzw nicht.Aber ich habe festgestellt, das ich schon ein
Datagrid habe, und diese Funktion nicht unbedingt notwendig ist.
ich befasse mich spaeter nochmal intensiv mit Datenbanken.
Selbstverstaendlich nochmal danke fuer die Hilfe.
Kha - Mo 10.05.10 10:22
Chiyoko hat folgendes geschrieben : |
| ich befasse mich spaeter nochmal intensiv mit Datenbanken. |
Was du genau erreichen willst, habe ich zwar immer noch nicht verstanden, aber eines verspreche ich dir: Wenn du dich irgendwann einmal mit O/RMs und LINQ angefreundet hast, wird sich das Problem in zwei Zeilen und so elegant wie nur irgend möglich lösen ;) .
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!