bindinsource erste Zeile wird mit 0 angegeben !?

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von kiter20.

    bindinsource erste Zeile wird mit 0 angegeben !?

    Hallo Leute,

    ich habe einen DGV an den eine bs dranne hängt.
    Der User soll jetzt die Möglichkeit haben, Datensätze hoch und runter schieben zu können. Dafür habe ich eine Spalte mit eingebaut, die ich als sortierspalte verwende.
    Funktioniert auch alles soweit wunderbar mit dem sortieren.

    Jetzt möchte ich aber, dass die verschobene Zeile weiterhin die aktive bleibt.
    Nur leider funktioniert das nur bedingt.
    Ich hatte mich jetzt für diesen weg entschieden:

    VB.NET-Quellcode

    1. Dim found As Integer = StabdatenBindingSource.Find("StabID", currentView.StabID)
    2. StabdatenBindingSource.Position = found


    Jetzt habe ich aber das Problem, dass wenn ich in der ersten Zeile binn, ich die .position zurückbekomme. Erst wenn ich das 2.mal die Zeile verschiebe, bekomme ich
    für die position der ersten Zeile eine 1 zurück.

    Wie kommt das?

    Hier der komplette Code:

    VB.NET-Quellcode

    1. Private Sub cmdStabDown_Click(sender As Object, e As EventArgs) Handles cmdStabDown.Click
    2. Dim _Order As String
    3. 'MessageBox.Show(CStr(StabdatenBindingSource.Position))
    4. If StabdatenBindingSource.Current Is Nothing Then
    5. Exit Sub
    6. End If
    7. Dim currentView = DirectCast(DirectCast(StabdatenBindingSource.Current, DataRowView).Row, StabdatenRow)
    8. Dim _position = StabdatenBindingSource.Position
    9. StabdatenBindingSource.MoveNext()
    10. Dim nextRow = DirectCast(DirectCast(StabdatenBindingSource.Current, DataRowView).Row, StabdatenRow)
    11. Dim FirstRow As DataSet1.StabdatenRow
    12. FirstRow = DataSet1.Stabdaten.FindByStabID(currentView.StabID)
    13. _Order = FirstRow.StabOrder
    14. Dim SecondRow As DataSet1.StabdatenRow
    15. SecondRow = DataSet1.Stabdaten.FindByStabID(nextRow.StabID)
    16. FirstRow.StabOrder = SecondRow.StabOrder
    17. SecondRow.StabOrder = _Order
    18. Dim found As Integer = StabdatenBindingSource.Find("StabID", currentView.StabID)
    19. StabdatenBindingSource.Position = found
    20. End Sub


    Interessanterweise, funktioniert das in einem anderen dgv.
    Ich habe es auch schon mit .movenext probiert.
    Aber immer in der ersten und vorletzen Zeile gibt es probleme.

    Die sortierung lege ich beim Form öffnen fest.

    VB.NET-Quellcode

    1. StabdatenBindingSource.Sort = "StabOrder ASC"
    "Mann" lernt mit seinen Projekten.
    sieht mir umständlich aus, aber könnte funzzen.
    Aber hier mal eine Vereinfachung, vlt. geht die ja besser:

    VB.NET-Quellcode

    1. Private Sub cmdStabDown_Click(sender As Object, e As EventArgs) Handles cmdStabDown.Click
    2. 'tauscht order der Current zeile mit der nächsten
    3. If StabdatenBindingSource.Position >= StabdatenBindingSource.count -1 Then Return
    4. Dim _position = StabdatenBindingSource.Position
    5. Dim rw0 = DirectCast(DirectCast(StabdatenBindingSource(_position), DataRowView).Row, StabdatenRow)
    6. Dim rw1 = DirectCast(DirectCast(StabdatenBindingSource(_position + 1), DataRowView).Row, StabdatenRow)
    7. Dim order = rw0.StabOrder
    8. rw0.StabOrder = rw1.StabOrder
    9. rw1.StabOrder = order
    10. StabdatenBindingSource.Position = _position + 1
    11. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()