Durchs gebundene Datagridview "tabben" triggert DGV.SelectionChanged nicht richtig

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

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Noyne.

    Durchs gebundene Datagridview "tabben" triggert DGV.SelectionChanged nicht richtig

    Hey Leute ...
    Ich wende mich mal wieder an euch, weil ich nicht wirklich weiter weiß ...

    Folgende Ausgangsstellung:
    Ich habe ein Datagridview (DGV), wo eine Bindingsource dran hängt.
    Der SelectionMode des DGV steht auf FullRowSelect und die RowHeader sind nicht sichtbar eingestellt ...
    Wenn ich mit der Maus die Selection ändere, triggert ja u.a. das .SelectionChanged-Event, das bei mir so aussieht:

    VB.NET-Quellcode

    1. Private Sub DGV_Heim_SelectionChanged(sender As Object, e As EventArgs) Handles DGV_Heim.SelectionChanged
    2. If Not HeimBindingSource.Count = 0 Then
    3. ' DGV_Heim.CurrentCell = DGV_Heim.SelectedRows(0).Cells(0)
    4. hRow = DirectCast(DirectCast(HeimBindingSource.Current, DataRowView).Row, HeimRow)
    5. End If
    6. End Sub
    Die auskommentierte Zeile ist die, die mir Probleme macht ...
    Es ist ja unschönerweise möglich mit der Tab-Taste durch die einzelnen Zellen des DGVs durchzu"tabben" ...
    Das Ding ist, wenn ich die auskommentierte Zeile NICHT drin hab', und mit Tab durch das DGV gehe, ändert es zwar die angezeigte Auswahl im DGV, aber die hRow ist die vom vorher ausgewählten Datensatz.
    Beispiel!! Angenommen, das DGV wäre vom Aussehen her so aufgebaut:

    Name
    Straße
    Ort
    Heim 1
    Straße 1
    Ort 1
    Heim 2
    Straße 2
    Ort 2
    Heim 3
    Straße 3
    Ort 3

    und die hRow ist jetzt auf den Datensatz von Heim 2 gecastet und ich fange jetzt an, Tab zu drücken und beim Springen in die nächste Reihe (Heim 3) triggert das .SelectionChanged-Event, aber statt dann die hRow auf Heim 3 zu casten, bleibt er bei Heim 2, obwohl Heim 3 gewählt ist.

    Nehme ich aber die oben auskommentierte Zeile (die ich mehrfach beim Google-Suchen mit den Begriffen "Datagridview" und "Tab" gefunden habe) mit rein, funktioniert das Sortieren über die ColumnHeader nicht mehr richtig!!
    Entweder wird mir plötzlich gar nichts mehr angezeigt oder die Selection ist weg und es ist schwachsinnig sortiert ...
    Ja, auf die Sortiermöglichkeit wird viel Wert gesetzt ...
    Ja, das DGV ist auf ReadOnly = True eingestellt ... MultiSelect ist False ... TabStop ist auch False ...

    Jetzt meine Frage an euch:
    Gibt es eine Möglichkeit, die Tab-Benutzung im DGV zu unterbinden??
    Oder gibt es eine Möglichkeit mit der Tab-Nutzung das .SelectionChanged richtig zu triggern??
    Oder ist es ein "entweder ... oder" und es ist nicht beides möglich??

    Bitte helft mir (mal wieder) ... Ich komme an der Stelle einfach nicht weiter ...
    Eure Noyne
    Your computer is running... You better go chase it! :P :D
    @Noyne
    Was ist denn, wenn Du das PositionChanged oder CurrentChanged-Ereignis der Bindingsource benutzt?

    VB.NET-Quellcode

    1. Private Sub HeimBindingSource_PositionChanged(sender As Object, e As EventArgs) Handles HeimBindingSource.PositionChanged
    2. Dim row = TryCast(TryCast(Me.HeimBindingSource.Current, DataRowView).Row, DataSet1.HeimRow)
    3. If Not row Is Nothing Then
    4. Me.Label1.Text = row.Name
    5. End If
    6. End Sub

    Noyne schrieb:

    Gibt es eine Möglichkeit, die Tab-Benutzung im DGV zu unterbinden??
    Kannst wie folgt machen...

    VB.NET-Quellcode

    1. Private Sub DGV_KeyDown(sender As Object, e As KeyEventArgs) Handles Dein_DataGridView.KeyDown
    2. If e.KeyCode = Keys.Tab Then e.Handled = True
    3. End Sub
    Ich danke euch beiden für eure Antworten :D
    Ich hab' mich für das KeyDown-Event entschieden, weil ich das eh schu eingebaut hatte wegen einer Reaktion auf "Enter" und die Änderung mich jetzt nicht umbringt und schnell geht ;)
    (Dafür gibt's auch ein kleines Hilfreich von mir ;))

    Vielen Dank nochmal :D
    Your computer is running... You better go chase it! :P :D