.xml Datei auslesen und in DGV anzeigen

  • VB.NET
  • .NET (FX) 4.0

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

    .xml Datei auslesen und in DGV anzeigen

    Hallo,
    um die .xml Datei auszulesen und im DGV anzuzeigen benutze ich folgenden Code:

    Visual Basic-Quellcode

    1. Me.tabl1e.ReadXml(path)
    2. DataGridView1.DataSource = Me.tabl1e


    Dass funktioniert nicht, die Tabelle wird zwar mit den richtigen Columns erstellt, aber die Werte werden nicht eingegeben.
    @Leo&Eike Wie hast Du die XML erstellt?
    Du musst zuerst die DataTable anlegen, dann die Werte da reintun, danach speichern und dann erst kannst Du sie lesen.
    Gugst Du hier.
    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!
    @RodFromGermany
    Habe das übernommen und angepasst, in meinem Speicher Button steht jetzt folgendes drin:

    Visual Basic-Quellcode

    1. Me.tabl1e.TableName = "chart"
    2. InitData()
    3. Dim path = IO.Path.Combine(Application.StartupPath, ComboBox2.SelectedItem.ToString + ".xml")
    4. Me.tabl1e.ReadXml(path)
    5. Me.DataGridView1.DataSource = Me.tabl1e
    6. ' letzte Zeile anzeigen
    7. Me.DataGridView1.CurrentCell = Me.DataGridView1.Item(0, Me.DataGridView1.Rows.Count - 2)


    Und erhalte folgende Fehlermeldung:
    Spoiler anzeigen
    Informationen über das Aufrufen von JIT-Debuggen
    anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

    ************** Ausnahmetext **************
    System.ArgumentOutOfRangeException: Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein.
    Parametername: index
    bei System.Collections.ArrayList.get_Item(Int32 index)
    bei System.Windows.Forms.DataGridViewRowCollection.SharedRow(Int32 rowIndex)
    bei System.Windows.Forms.DataGridViewRowCollection.get_Item(Int32 index)
    bei System.Windows.Forms.DataGridView.get_Item(Int32 columnIndex, Int32 rowIndex)
    bei WindowsApplication1.WorkoutTracker.ComboBox2_SelectedIndexChanged(Object sender, EventArgs e) in C:\Users\Niklas\Documents\Desktop\WindowsApplication1\WindowsApplication1\WorkoutTracker.vb:Zeile 204.
    bei System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
    bei System.Windows.Forms.ComboBox.WmReflectCommand(Message& m)
    bei System.Windows.Forms.ComboBox.WndProc(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    ************** Geladene Assemblys **************
    mscorlib
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.18444 built by: FX451RTMGDR.
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
    ----------------------------------------
    Leo & Eike - FirstStep
    Assembly-Version: 5.0.0.0.
    Win32-Version: 5.0.0.0.
    CodeBase: file:///C:/Users/Niklas/Documents/Desktop/WindowsApplication1/WindowsApplication1/bin/Release/Leo %26 Eike - FirstStep.exe.
    ----------------------------------------
    Microsoft.VisualBasic
    Assembly-Version: 10.0.0.0.
    Win32-Version: 11.0.50938.18408 built by: FX451RTMGREL.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
    ----------------------------------------
    System
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
    ----------------------------------------
    System.Core
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
    ----------------------------------------
    System.Windows.Forms
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
    ----------------------------------------
    System.Drawing
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
    ----------------------------------------
    System.Configuration
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
    ----------------------------------------
    System.Xml
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.34234 built by: FX452RTMGDR.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
    ----------------------------------------
    System.Runtime.Remoting
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.34108 built by: FX45W81RTMGDR.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
    ----------------------------------------
    MySql.Data
    Assembly-Version: 1.0.10.0.
    Win32-Version: 1.0.10.0.
    CodeBase: file:///C:/Users/Niklas/Documents/Desktop/WindowsApplication1/WindowsApplication1/bin/Release/MySql.Data.DLL.
    ----------------------------------------
    System.Data
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll.
    ----------------------------------------
    System.Windows.Forms.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
    ----------------------------------------
    mscorlib.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
    ----------------------------------------
    System.Numerics
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.18408 built by: FX451RTMGREL.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll.
    ----------------------------------------
    Microsoft.mshtml
    Assembly-Version: 7.0.3300.0.
    Win32-Version: 7.0.3300.0.
    CodeBase: file:///C:/Windows/assembly/GAC/Microsoft.mshtml/7.0.3300.0__b03f5f7f11d50a3a/Microsoft.mshtml.dll.
    ----------------------------------------

    ************** JIT-Debuggen **************
    Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
    Konfigurationsdatei der Anwendung oder des Computers
    (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
    Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

    Zum Beispiel:

    <configuration>
    <system.windows.forms jitDebugging="true" />
    </configuration>

    Wenn das JIT-Debuggen aktiviert ist, werden alle Ausnahmefehler an den JIT-Debugger gesendet, der auf dem
    Computer registriert ist, und nicht in diesem Dialogfeld behandelt.

    Hast du die Fehlermeldung gelesen? Die besagt, dass du auf irgendetwas in einem Array/Auflistung zugreifen möchtest, das nicht existiert. Me.DataGridView1.Item(0, Me.DataGridView1.Rows.Count - 2) bedeutet, dass du -1 liest, wenn es nur eine Zeile gibt...

    BTW:

    ErfinderDesRades schrieb:

    Leider sieht man dann immer wieder, wie die Leuts die Daten aus dem DatagridView puhlen, und herumkonvertieren und komische Sachen machen.
    Bitte lesen: Daten laden, speichern, verarbeiten - einfachste Variante
    Mit freundlichen Grüßen,
    Thunderbolt

    Leo&Eike schrieb:

    VB.NET-Quellcode

    1. Me.DataGridView1.CurrentCell = Me.DataGridView1.Item(0, Me.DataGridView1.Rows.Count - 2)
    Ich denke mal, Deine XML-Datei ist nicht DataTable kompatibel.
    Arbeite zunächst mein Beispiel durch und verstehe es. Wenn Du was nicht verstehst, frag nach.
    Wenn Du es verstanden hast, mach weiter.
    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!
    @Leo&Eike Wer genau hat die XML-Datei gemacht? Ist das ein export der DataTable?
    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!
    @Leo&Eike Ist der Programmablauf bei Dir exakt so wie in dem Beispiel?
    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!

    timmi31061 schrieb:

    Ich wollte hierbei auch eher darauf hinaus, dass die Subtraktion von 2 evtl. ein Tippfehler ist und du stattdessen ​1 schreiben wolltest.


    Ich würde empfehlen diesen Post nicht zu überlesen :)
    Dein oben beschriebener Fehler lässt sich mit Sichertheit damit beheben :)
    lg.

    LucaWelker

    LucaWelker schrieb:

    ch wollte hierbei auch eher darauf hinaus, dass die Subtraktion von 2 evtl. ein Tippfehler ist und du stattdessen 1 schreiben wolltest.


    Die Tabelle wird immernoch erstellt, die Daten aber nicht hinzugefügt!

    EDIT: HABS GELÖST

    Visual Basic-Quellcode

    1. Me.tabl1e.TableName = "chart"
    2. InitData()
    3. Dim path = IO.Path.Combine(Application.StartupPath, ComboBox2.SelectedItem.ToString + ".xml")
    4. ' Me.tabl1e.ReadXml(path)
    5. 'Me.DataGridView1.DataSource = ds.Tables(0)
    6. Dim ds As New DataSet
    7. ds.ReadXml(path)
    8. Me.DataGridView1.DataSource = ds.Tables(0)
    9. ' letzte Zeile anzeigen
    10. Me.DataGridView1.CurrentCell = Me.DataGridView1.Item(0, Me.DataGridView1.Rows.Count - 1)