Autor Beitrag
Chiyoko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Sa 08.05.10 13:44 
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.

ausblenden C#-Quelltext
1:
2:
3:
4:
DataView myDataView = datat.Table[0].DefaultView;
myDataView.Sort = "coulmName DESC";

// oder aber ueber die rows


Wenn ich es nicht funktioniert, nehme ich Xml..aber warum, wenn die Daten schon in der mdb vorliegen, die ich eh benutze?!
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 08.05.10 14:12 
user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
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.)

user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: 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:
openbook.galileocomp...28c4b9891f68a2b5d4c0
(Was auch nicht funktioniert.)
ausblenden 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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.

user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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.

user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 08.05.10 17:06 
Hallo Chiyoko,

du schreibst, du hast eine Spalte namens "ID", präsentierst aber diesen Code:
ausblenden C#-Quelltext
1:
myDataView.Sort = "coulmName DESC";					


Hast du denn bei dir dann den richtigen Spaltennamen "ID" angegeben, d.h.
ausblenden C#-Quelltext
1:
myDataView.Sort = "ID DESC";					

???
Chiyoko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 08.05.10 20:53 
user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: 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...

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 09.05.10 10:37 
user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
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):
ausblenden C#-Quelltext
1:
2:
3:
4:
    for(int i = 0; i < myDataView.Count; i++)
    {
        Console.WriteLine(myDataView[i]["ID"]);
    }

Jürgen
Chiyoko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: 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.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: 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.
Chiyoko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Mo 10.05.10 01:48 
Ich bin soeben auf eine aeusserst interessante Seite gestossen, die wie ich finde, sehr ausfuehrlich und informativ auf fast alles eingeht, was C# betrifft, darunter auch Datenbanken:

home.f1.fhtw-berlin....ement/Grundlagen.htm

Das werd ich mir mal zu Gemuete fuehren, und vielleicht loese ich damit auch mein(nicht mehr vorhandenes ) Problem.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 10.05.10 10:22 
user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
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 ;) .

_________________
>λ=