DatagridView verliert Fokus

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ludl8615.

    DatagridView verliert Fokus

    Hallo,
    Auch wenn ich gestern erst ein Thema durch hatte, muss ich euch direkt wieder ausfragen... Ich weiß nicht ob ein neues Thema sinnvoll ist, aber ich mach das jetzt mal so. (Notfalls hängt es Bitte an)

    Ich habe zwei DGV's die beide mit einem DataSet in Verbindung stehen. In dem LS_GewichteDataGridView werden eigentlich nur Daten aus einer DataTable (LS_Gewichte, kurz LS_G) abgerufen. Eine Spalte der zweiten DataTable (Laststufen, kurz LS) wird mittels Code errechnet. Beide DataTable sind miteinander verknüpft: LS_G = parent, LS = child.
    Auslöser für die Berechnung soll durch jede Änderung der beiden DGV's hervorgerufen werden. Hierbei wird ein Wert aus einer Zeile der LS_G mit dem Wert der vorherigen Zeile addiert (Anfangswert = 0).
    Wenn ich in LS_G eine Zeile lösche und den Fokus im DGV auf eine andere Zeile lege, funktioniert es soweit wunderbar. Wenn ich allerdings wieder eine neue Zeile anlegen möchte, kann ich zwar eine Auswahl treffen, aber die neue Zeile wird direkt wieder gelöscht und der Fokus springt wieder auf die erste Zeile in der DGV.

    Hier mal ein Codeschnipsel (kurz gehalten, nur mit dem Event "CellLeave"):

    Quellcode

    1. Private Sub LSIntervallDataGridView_CellValueChanged(sender As Object, e As EventArgs) Handles LS_GewichteDataGridView.CellLeave, LaststufenDataGridView.CellLeave
    2. Dim SummeLast As Double = 0, Flaeche As Double, LS_last As Double = 0, bFlag As Boolean = False, SummeLaststufe As Double = 0
    3. '## Fläche und Lasten ####################################
    4. Dim ZelleRow = DirectCast(DirectCast(ZelleBindingSource(ZelleBindingSource.Position), DataRowView).Row, Standard.ZelleRow)
    5. Flaeche = CDbl(ZelleRow.Flaeche)
    6. '*********** Last dieser Laststufe ***********************
    7. Dim LaststRow = DirectCast(DirectCast(LaststufenBindingSource(LaststufenBindingSource.Position), DataRowView).Row, Standard.LaststufenRow)
    8. For Each GewichtRow As Standard.LS_GewichteRow In Standard1.LS_Gewichte
    9. If GewichtRow.LS_ID = LaststRow.ID Then
    10. For Each GRow As Standard.GewichteRow In Standard1.Gewichte
    11. If GewichtRow.G_ID = GRow.ID Then
    12. LS_last = LS_last + GRow.Kraft
    13. End If
    14. Next
    15. End If
    16. Next
    17. DeltaSigma_Value.Text = Math.Round((LS_last * 0.001 * dHebel) / Flaeche, 6).ToString
    18. '*********************************************************
    19. '************* Aufsummierung der Laststufen für DGV ******
    20. For Each SummeRow As Standard.LaststufenRow In Standard1.Laststufen
    21. If SummeRow.ZelleID = ZelleRow.ID Then
    22. SummeLaststufe = SummeLaststufe + SummeRow.SumAuflast
    23. SummeRow.SumLaststufen = Math.Round((SummeLaststufe * 0.001 * dHebel) / Flaeche, 4)
    24. End If
    25. Next
    26. '*********************************************************
    27. '#########################################################
    28. End Sub

    In " Last dieser Laststufe" werden nur die Werte in LS_G summiert die zur Markierten Zeile der child-Table gehören. Macht keine Probleme
    Sobald ich aber die Schleife " Aufsummierung der Laststufen für DGV " auskommentiere, kommt das oben beschriebene Problem nicht vor, aber diese Berechnung ist eigentlich die wichtigste!

    Liegt das Problem an der Beziehung zwischen den beiden DataTable's?
    Habt ihr Rat??

    Und welches Event/s hierfür am besten geeignet ist/sind, ist mir auch noch nicht klar..
    Bilder
    • 1_Ausgangszustand.JPG

      44,22 kB, 556×298, 97 mal angesehen
    • 2_Gewicht_geloescht.JPG

      38,8 kB, 556×266, 102 mal angesehen
    • 3_Neue_Auswahl.JPG

      52,74 kB, 543×267, 120 mal angesehen
    • 4.JPG

      39,03 kB, 556×269, 115 mal angesehen
    • 5_neuer_Fokus.JPG

      38,96 kB, 544×279, 100 mal angesehen
    • Ausschnitt_aus_DataSet.JPG

      58,71 kB, 909×223, 122 mal angesehen

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

    Also es hängt definitiv an der Beziehung. Sobald die Schleife "Aufsummierung der Laststufen für DGV" durchlaufen wird, wird ja die DataTable "LS" aktualisiert. Und das hat Einfluss auf die DataTable "LS_G", die dadurch die letzte Änderung nicht übernimmt... Oder so ähnlich.

    Ich weiß aber noch nicht wie ich diese Problematik umgehe. Mit Hilfe der Expressions der Column "SummeLaststufe" werde ich nicht weit kommen, aufgrund des Anfangwert-Problems... Außer vielleicht mit isnull(..,0), aber wie beziehe ich mich auf die vorherige Zeile?!?. Ich versuch mal mein Glück.

    Vielleicht fällt euch ja spontan ein besserer Lösungsweg ein..

    Danke schon mal.