DataGridView event SelectionChanged

  • VB.NET
  • .NET (FX) 4.0

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

    DataGridView event SelectionChanged

    Guten Morgen Zusammen,

    ich bin gerade mit meinem (Anfänger-)Latein am Ende.

    Ich habe eine Datagridview die über eine CSV-Datei gefüllt wird.
    Nun möchte ich mit den Werten aus der Datagridview weiterarbeiten. Die Infos daraus möchte ich immer haben, wenn sich die Selektion der DGV ändert.
    Bisher hatte ich folgendes drin

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    2. Projekt_auswählen()
    3. End Sub


    Das wollte ich nun abändern in

    VB.NET-Quellcode

    1. Private Sub DataGridView1_SelectionChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.SelectionChanged
    2. Projekt_auswählen()
    3. End Sub


    Leider kommt mir nun bei Form Load an der Stelle(Zeile 6), an der die DGV gefüllt wird die Fehlermeldung "System.InvalidCastException: "Das Objekt des Typs "System.EventArgs" kann nicht in Typ "System.Windows.Forms.DataGridViewCellEventArgs" umgewandelt werden."

    VB.NET-Quellcode

    1. DataGridView1.Rows.Clear()
    2. 'CSV DATENBANK LESEN
    3. For Each Datenbank As String In System.IO.File.ReadAllLines(DatenbankDatei, System.Text.Encoding.GetEncoding("Windows-1252"))
    4. Dim Array() As String = Split(Datenbank, str)
    5. DataGridView1.Rows.Add(Array(0), Array(1), Array(2), Array(3))
    6. Next
    7. 'Sortieren und erste Zeile markieren
    8. DataGridView1.Sort(DataGridView1.Columns(2), ListSortDirection.Descending)
    9. DataGridView1.Rows(0).Selected = True[b][/b]


    Vielleicht kann mir jemand sagen, wo hier mein Knoten ist. ?(

    Liebe Grüße Sarah
    Das Handles beschreibt, dass die Methode, die du definierst, ein Event abonniert.
    Verschiedene Events haben nun verschiedene Signaturen als Voraussetzung.
    Bspw. das CellClicked-Event eines DGVs erwartet eine Methode, die zwei Parameter hat, das erste vom Typ Object, das zweite vom Typ DataGridViewCellEventArgs.
    SelectionChanged will aber scheinbar als zweiten Typ EventArgs haben. Ändere also den Datentyp, bzw. erstelle die Methode über den Designer in VS, dann steht da automatisch das Richtige.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Danke Erfinder des Rades.
    Wenn du die Vorschläge meinst, dann ist das bei mir schon aktiviert.

    Der Fehler kam daher, dass ich den Block von " DataGridView1.CellClick " kopiert habe :whistling:

    Aber nun versteh ich das in der Mitte mal so einigermaßen.
    Als blutiger Anfänger ist man Dankbar über jeden Hinweis :thumbsup:
    Ich meine, dass du für dein Projekt Option Strict On einstellen solltest. Weil hast du glaub ich nicht:
    Mit Strict On käme es garnet zum Form_Load, sondern der Compiler sagt dir schon viel früher, wo was faul ist.
    Und dassis ein grundsätzliches Programmier-Prinzip: Je früher der Fehler hochkommt, desto besser.
    Und solange du Option Strict nicht On hast, kannst du auch die Unterschiedlichkeit von Datentypen nicht wirklich verstehen - weil im Code kann man ja alles beliebig durcheinander-manschen, und stößt nur in "Glücksfällen" darauf, wie du eben jetzt - dass ein EventArgs eben kein DataGridViewCellEventArgs ist.
    Aber das steht alles in den Link, also bei Interesse versuch das nochmal.
    Ich habs grad extra nochmal ausprobiert - sowas:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_SelectionChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.SelectionChanged
    darf garnet kompilieren (also bis Form_Load darf man damit garnet kommen)