.SuspendBinding und Datagridview

  • VB.NET

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

    .SuspendBinding und Datagridview

    Hi,

    Folgendes:
    Meine Datagridview häng an einem Bindingsource (Sortiert die Spalte "Order")

    Damit der Anwender die Anzeigereihenfolge selber einstellen kann, habe ich eine ungebundene Spalte in der Datagridview in der der User die neue Reihenfolge eintragen kan. Nach dem Click auf Button sollen diese Werte in die Spalte("Order") übertragen werden. Aber es gibt immer wieder 2 gleiche Werte in der Spalte("Order").

    Es bedeutet für mich, wenn die erste (oder zweite) Zeile geändert wird, wird auch schon neu Sortiert, und dadurch kommen die falschen Zahlen zu Stande.
    Ich dachte, mit .Suspendbinding würde es gehen, aber das funktioniert mit Datagridview nicht wie angedacht.

    Gibt es ne Lösung oder einen anderen Ansatz?

    VB.NET-Quellcode

    1. Private Sub btn2Order_Click(sender As Object, e As System.EventArgs) Handles btn2Order.Click
    2. Dim i As Integer = 0
    3. MEbene2BindingSource.SuspendBinding()
    4. 'MEbene2BindingSource.RaiseListChangedEvents = False
    5. 'For i = 0 To MEbene2DataGridView.Rows.Count - 1
    6. 'MEbene2DataGridView.Rows(i).Cells(1).Value = 0
    7. 'Next
    8. For i = 0 To MEbene2DataGridView.Rows.Count - 1
    9. MEbene2DataGridView.Rows(i).Cells(1).Value = CInt(MEbene2DataGridView.Rows(i).Cells(0).Value)
    10. Next
    11. MEbene2BindingSource.EndEdit()
    12. 'MEbene2BindingSource.RaiseListChangedEvents = True
    13. MEbene2BindingSource.ResetBindings(True)
    14. End Sub


    Die Auskommentierungen sind Versuche!

    Gruß Wolfy
    Hey,

    habe ne Lösung, die mich aber nicht befriedigt.

    schauts Euch mal bitte an... es gibt doch bestimmt was besseres. 8o

    VB.NET-Quellcode

    1. Dim rw() As DataRow
    2. Dim arrID(1, 0) As Integer
    3. Dim i As Integer = 0
    4. Dim counter As Integer = 0
    5. Dim arrcount As Integer = 0
    6. 'Zwischenspeichern in Array
    7. For i = 0 To MEbene2DataGridView.Rows.Count - 2
    8. ReDim Preserve arrID(1, UBound(arrID, 2) + 1)
    9. arrID(0, UBound(arrID, 2)) = CInt(MEbene2DataGridView.Rows(i).Cells(4).Value)
    10. arrID(1, UBound(arrID, 2)) = CInt(MEbene2DataGridView.Rows(i).Cells(0).Value)
    11. Next
    12. 'jetzt in der Datatable ändern
    13. For i = 1 To UBound(arrID, 2)
    14. rw = MenueDefinition.MEbene2.Select("ID = '" & arrID(0, i) & "'")
    15. If rw.Count <> 1 Then
    16. MsgBox("nix gefunden")
    17. Else
    18. 'Debug.Print("ID: " & rw(0)("ID"))
    19. rw(0)("Order") = arrID(1, i)
    20. End If
    21. Next


    Gruß Wolfy
    Ich versteh das Problem gar nicht erst. Ich habe:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private ReadOnly Foos As New List(Of Foo)
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. For i = 0 To DataGridView1.Rows.Count - 2 '- 2, da sonst die Zelle der neuer-Eintrag-Zeile-befüllt wird
    5. DataGridView1.Item(1, i).Value = CInt(DataGridView1.Item(0, i).Value)
    6. Next
    7. End Sub
    8. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    9. FooBindingSource.DataSource = Foos
    10. Foos.Add(New Foo With {.Bar = 8})
    11. Foos.Add(New Foo With {.Bar = 1})
    12. Foos.Add(New Foo With {.Bar = 3})
    13. FooBindingSource.ResetBindings(False)
    14. End Sub
    15. End Class
    16. Public Class Foo
    17. Property Bar As Integer
    18. End Class

    Und dann vor Klick

    und nach Klick

    So what?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Wolfy schrieb:

    VB.NET-Quellcode

    1. Dim rw() As DataRow
    2. Dim arrID(1, 0) As Integer
    3. Dim i As Integer = 0
    4. Dim counter As Integer = 0
    5. Dim arrcount As Integer = 0
    6. 'Zwischenspeichern in Array
    7. For i = 0 To MEbene2DataGridView.Rows.Count - 2
    8. ReDim Preserve arrID(1, UBound(arrID, 2) + 1)
    9. arrID(0, UBound(arrID, 2)) = CInt(MEbene2DataGridView.Rows(i).Cells(4).Value)
    10. arrID(1, UBound(arrID, 2)) = CInt(MEbene2DataGridView.Rows(i).Cells(0).Value)
    11. Next
    12. 'jetzt in der Datatable ändern
    13. For i = 1 To UBound(arrID, 2)
    14. rw = MenueDefinition.MEbene2.Select("ID = '" & arrID(0, i) & "'")
    15. If rw.Count <> 1 Then
    16. MsgBox("nix gefunden")
    17. Else
    18. 'Debug.Print("ID: " & rw(0)("ID"))
    19. rw(0)("Order") = arrID(1, i)
    20. End If
    21. Next
    Das kannst du besser.
    Wenn du
    1. das in eine eigene Methode packst
    2. den Namespace Microsoft.Visualbasic rauswirfst, und
    3. VB.NET-Quellcode

      1. Dim rw() As DataRow
      ersetzt durch

      VB.NET-Quellcode

      1. Dim rw() As myTypedRow
      dann schreib ich dir was einigermassen schnuckeliges.
    Upps.
    Hatte vergessen mich zu bedanken.

    Vielen Dank für die Hilfe und....
    @EdR Danke für Dein Angebot. Ich weiß es zu schätzen.

    Habe in letzter Zeit viel Experimentiert. Werde Euch bald wieder mir Fragen löchern.