Automatisches Befüllen eines Datagridview, Fehler : "index außerhalb des Arraybereichs"

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von kugelblitz.

    Automatisches Befüllen eines Datagridview, Fehler : "index außerhalb des Arraybereichs"

    Hi :)
    ich scheitere gerade an einer ganz einfachen Funktion.
    Ich möchte ein Datagridview mit Daten aus einer Txt Datei befüllen.
    Diese Textdatei is folgendermaßen aufgebaut:
    Text1;Text2;Text3;
    bis jetzt bin bei sowas :


    Imports System.IO

    Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    dvg.Columns.Add("1", "name")
    dvg.Columns.Add("2", "price")
    dvg.Columns.Add("3", "amount")
    Dim sr As New StreamReader("C:\TableEditor\table.te")
    Dim line As Array

    While sr.Peek() <> -1
    line = sr.ReadLine.Split(";")
    dvg.Rows.Add(line(0), line(1), line(2))
    End While



    End Sub


    End Class

    Visual Basic liefert mir dann immer folgenden Fehler:
    System.IndexOutOfRangeException bzw Der Index war außerhalb des Arraybereichs.
    Wie lässt sich dieser Error beheben oder bin ich komplett auf dem Holzweg?
    ich hoffe ihr könnt mir helfen :)


    mfg masterofd
    Wahrscheinlich hast Du For i = 1 To n geschrieben, mach es so: For i = 0 To n - 1, Indizes sind in .NET Null-basiert.
    Ansonsten;
    Poste mal die Zeile, in der der Fehler auftritt.
    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!
    @RushDen: Kann man schon machen, aber man sollte das Ganze lieber gleich typisiert machen, indem man die Array-Klammern hinter den Datentyp setzt. So ist es halt eine normale Auflistung, in die beliebig was eingesetzt werden kann.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Nein, Dim line As String()

    Man deklariert Arrays immer, indem man die Klammern hinter den Datentyp setzt.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Klick mal mit der Maus auf Add(...) und drück auf F1 (= Hilfe), da öffnet sich die MSDN, die stets Dein 1. Anlaufpunkt bei solch Problemen sein sollte.
    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!
    Machma

    VB.NET-Quellcode

    1. MessageBox.Show(line.Count.ToString)
    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!
    <<< System.IndexOutOfRangeException bzw Der Index war außerhalb des Arraybereichs. >>>
    Wie lässt sich dieser Error beheben oder bin ich komplett auf dem Holzweg?

    Du greifst auf Array-Elemente zu, die nicht existieren.
    Beispiel:
    s = "Text1;Text2"
    line = s.Split(";")
    Danach existieren die Elemente 0 und 1, aber der Zugriff auf "line(2)" erzeugt den angegebenen Fehler.
    Ich schließe daraus dass in deiner Textdatei auch Zeilen enthalten sind, die weniger als drei Spalten enthalten.
    Auch Leerzeilen erzeugen natürlich den Fehler. Diese Ausnahmen wirst du wohl noch abfangen müssen.

    Man deklariert Arrays immer, indem man die Klammern hinter den Datentyp setzt.

    Und M$ als Erfinder behauptet das Gegenteil. Siehe Online-Doku. Aber kompilierbar ist es trotzdem 8o
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!