XMLRead Sort Problem

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    XMLRead Sort Problem

    Ich lade über XMLRead eine XML Datei in ein Dataset und danach in ein Datagridview. Wenn ich jetzt aber die erste Spalte mit der ID sortieren lasse dann Sortiert er nicht

    1
    2
    3
    4

    Sondern

    1
    10
    11
    2
    20

    Ich weiß das es daran liegt das die Spalte als String und nicht als Integer gehändelt wird aber ich bekomme es einfach nicht hin das vorher oder nachher zu ändern.
    Vielleicht kann mir ja hier einer Helfen :)
    @xXlJONASLXx Oben wurden die Zahlen nach ihrer Größe sortiert, unten ihre Stringrepräsentationen nach dem Alphabet.
    Wenn Du Zahlen sortieren willst, musst Du dafür sorgen, dass Zahlen eingelesen werden, nicht Strings.
    Wie sieht die XML selbst aus? Mit welchem Code liest Du ein?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Einlesen mache ich über die Befehle

    Quellcode

    1. ds.Tables.Clear()
    2. ds.ReadXml(Personal.xml)
    3. DGV_Personal.DataSource = ds
    4. DGV_Personal.DataMember = Name


    ds = Dataset

    und die XML sieht folgendermaßen aus

    XML-Quellcode

    1. <?xml version="1.0" standalone="yes"?>
    2. <DocumentElement>
    3. <Personal>
    4. <Nr>1</Nr>
    5. <Name>Peter</Name>
    6. <Ort>Hannover</Ort>
    7. <Entfernung>120</Entfernung>
    8. </Personal>
    9. </DocumentElement>
    Indem Du im DataSet-Designer die DataTable-Row so einstellst, dass ihr Typ Int32 ist.
    Bilder
    • Unbenannt.png

      19,96 kB, 506×443, 157 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das habe ich schon versucht aber wenn ich

    Quellcode

    1. ds.Tables(DataMember).Columns(0).DataType = GetType(System.Int32)

    vor dem "ReadXML" mache sagt er: die Zeile existiert nicht. Wenn ich es nach dem "ReadXML " mache sagt er: Ich kann den DataTyp nicht nachträglich ändern.
    Hast Du typisiertes DataSet, welches Du im Designer erstellst? Dann brauchst Du die von Dir genannte Codezeile gar nicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich erstelle es im Code :

    VB.NET-Quellcode

    1. Dim Dataset_Personal As New DataSet
    2. Sub DatagridLoad()
    3. Dim filePath As String = ""
    4. Dim DataMember As String = ""
    5. filePath = PfadDaten + "\Datenbanken\Personal.xml"
    6. DataMember = "Personal"
    7. If Not filePath = "" Then
    8. Dataset_Personal.Tables.Clear()
    9. Dataset_Personal.ReadXml(filePath)
    10. Dataset_Personal_table.Clear()
    11. Dataset_Personal_table = ds.Tables(DataMember)
    12. DGV_Add_Movie.DataSource = Dataset_Personal
    13. DGV_Add_Movie.DataMember = DataMember
    14. Else
    15. MsgBox("Fehler")
    16. End If
    17. End Sub

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „xXlJONASLXx“ ()

    xXlJONASLXx schrieb:

    Ich Lade nur die XML ins Dataset mehr mache ich nicht. Er Lädt sich sämtliche Infos über die XML Einträge rein.
    Aber - wie du vielleicht gemerkt hast - im falschen Datentyp.
    Damit er sich die Einträge im richtigen Datentyp einlädt, solltest du ein typisiertes Dataset anlegen, mit einer geeigneten Tabelle.
    Und in dieser Tabelle den Spalten geeignete Datentypen zuweisen.
    In vier Views-Videos, Film 1 ist gezeigt, wie man ein typdataset erstellt.
    Und dann eben das typDataset mit .ReadXml aus der Xml befüllen.
    Also sowas:

    VB.NET-Quellcode

    1. Dim Dataset_Personal As New MyPersonalDataset
    2. 'Dataset_Personal.Tables.Clear() ' das nicht!!!! Die Tabellen dürfen natürlich nicht gelöscht werden!!
    3. Dataset_Personal.ReadXml(filePath)
    Kurze Anmerkungen zu möglichen Verbesserungen:
    • theoretisch: If Not filePath = "" Then -> If filePath <> "" Then
    • praktisch: filePath kann aufgrund der vorangegangenen COdezeilen niemals "" sein
    • Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden. Stichwort MsgBox
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Auch ne Möglichkeit. Ich benutze eine Extension, die String.IsNullOrEmpty nutzt. Einfach nur, weil ich Extensions mag und sie kürzer ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.