Import von Datei ein DataGridView -> kein Vergleich von Value mehr möglich

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Import von Datei ein DataGridView -> kein Vergleich von Value mehr möglich

    Hallo,

    ich habe ein DGV mit 3 Columns, dort kann ich entweder manuell Daten eintragen:

    VB.NET-Quellcode

    1. Private Sub btn_addmember_Click(sender As Object, e As EventArgs) Handles btn_addmember.Click
    2. Dim integervalue As Integer
    3. Dim newdata(3 - 1) As String
    4. newdata(_dg_members_racernumber_i) = txt_racernumber.Text
    5. newdata(_dg_members_racergroup_i) = txt_racergroup.Text
    6. newdata(_dg_members_racername_i) = txt_racername.Text
    7. dg_members.Rows.Add(newdata)
    8. If Integer.TryParse(txt_racernumber.Text, integervalue) Then
    9. txt_racernumber.Text = Convert.ToInt32(txt_racernumber.Text) + 1
    10. End If
    11. txt_racername.Text = ""
    12. txt_racername.Focus()
    13. End Sub


    Oder automatisch über einen Import einer Textdatei:

    VB.NET-Quellcode

    1. Private Sub LoadGridData(ByRef ThisGrid As DataGridView, ByVal Filename As String)
    2. Dim dataline(3 - 1) As String
    3. 'ThisGrid.DataSource = Nothing
    4. 'ThisGrid.Rows.Clear()
    5. For Each ThisLine In My.Computer.FileSystem.ReadAllText(Filename).Split(Environment.NewLine)
    6. If ThisLine.Trim() <> "" Then
    7. dataline = Split(ThisLine, "|||")
    8. ThisGrid.Rows.Add(dataline)
    9. End If
    10. Next
    11. 'ThisGrid.Refresh()
    12. End Sub

    Eigentlich sollte das, was nachher im DGV steht zu 100% identisch sein. Nun aber zu dem Problem für das ich keine Lösung finde.
    Ich gehe durch das DGV mit einer Schleife:

    VB.NET-Quellcode

    1. For Each row1 As DataGridViewRow In Participants.dg_members.Rows
    2. If row1.Cells(Participants._dg_members_racernumber_i).Value = current_racer Then
    3. Output_ExternalScreen.lbl_current_runner.Text += " " + row1.Cells(Participants._dg_members_racername_i).Value
    4. Exit For
    5. End If
    6. Next


    Nun ist es so, obwohl z.b. "current_racer" 2 ist und row1.Cells(Participants._dg_members_racernumber_i).Value ebenfalls 2 geht er nicht in die das If-Construct hinein. Wenn ich manuell daten in das DGB eintrage dann funktioniert es, nur beim Import geht es nicht. Es gibt eine Ausnahme und das ist die erste Row des DGV, bei dieser geht es, bei allen anderen folgenden nicht.
    Habe auch schon versucht die Werte aus der Text-Datei zuerst in ein Text-Feld zu schreiben, aber das hat auch nichts geändert. Irgendwelche Ideen?
    1. Vorschlag: Nix ins DataGrid einfügen, sondern sauber in ein DataTable. Dieses kannst du dann als DataSource deinem Grid hinzufügen. Soll dann eine weitere Zeile hinzukommen, erstelle eine DataRow (evtl. heißt die auch DataGridRow). Befülle diese mit Daten und schieß sie am ende in die DataTable.

    Zum Vergleichen der Daten kannst du dann durch deine DataTable gehen.


    2. Bitte nutze die aktuellen Technologien. "My.Computer" ist schlecht, nutze zum Verarbeiten von Dateien den System.IO Namespace.

    3. Kann es sein, dass dein Grid auf einer anderen Form liegt als dort, wo du Daten hinzufügst?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    1. Vorschlag: Nix ins DataGrid einfügen, sondern sauber in ein DataTable. Dieses kannst du dann als DataSource deinem Grid hinzufügen. Soll dann eine weitere Zeile hinzukommen, erstelle eine DataRow (evtl. heißt die auch DataGridRow). Befülle diese mit Daten und schieß sie am ende in die DataTable.

    Zum Vergleichen der Daten kannst du dann durch deine DataTable gehen.

    Ja das kann ich tun. Wird es denn mein Problem beheben?

    2. Bitte nutze die aktuellen Technologien. "My.Computer" ist schlecht, nutze zum Verarbeiten von Dateien den System.IO Namespace.

    Kann ich tun, ich hatte das nur aus einem Snippet im Internet kopiert um die Funktionalität drin zu haben. Funktioniert auch ohne Probleme aktuell. Ich vermute dies ist nicht die Ursache des Problems?

    3. Kann es sein, dass dein Grid auf einer anderen Form liegt als dort, wo du Daten hinzufügst?
    Ja das ist korrekt. Das Grid liegt in der Form wo ich die Inhalte bearbeiten kann (Hinzufügen, Ändern, löschen). Ich sehe da erstmal kein Problem (ich weis, dass man besser über Funktionen auf "andere" Daten zugreift, aber das ist nur ein kleines Projekt für mich selbst und ich brauche das Programm schon heute lauffähig) da es ja funktioniert wenn man Daten "manuell" einfügt.
    I habe das nun endlich gefixt. Grund war, dass Split() ein "NewLine" in das DGV einfügt. Die Erste Zeile hatte funktoniert, da es dort ja noch kein "NewLine" gibt.
    Mit folgendem Code habe ich das abgewendet:

    VB.NET-Quellcode

    1. For Each ThisLine In IO.File.ReadAllText(Filename).Split(ControlChars.CrLf.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
    @mstenz
    Machst Du

    VB.NET-Quellcode

    1. For Each ThisLine In IO.File.ReadLines(Filename)
    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!
    ist nur ein kleines Projekt für mich selbst und ich brauche das Programm schon heute lauffähig) da es ja funktioniert wenn man Daten "manuell" einfügt.


    "Was Hänschen nicht lernt, lernt Hans nimmer mehr."
    Heißt soviel wie: Mach's gleich richtig ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mstenz schrieb:

    Grund war, dass Split() ein "NewLine" in das DGV einfügt. Die Erste Zeile hatte funktoniert, da es dort ja noch kein "NewLine" gibt.
    Das ist ein typischer Fehler, der nur auftreten kann, wenn man Option Strict Off programmiert.

    Dringende Empfehlung, dein VisualStudio vernünftig einzurichten, damit der Compiler nicht macht, wie er denkt, sondern auftretende Type-Mismatches dir zu Klärung vorlegt:
    Visual Studio - Empfohlene Einstellungen