Fix: Reset_Current() leerte das Grid vor dem Hit-Test in Item_Scope
Root Cause des ursprünglich gemeldeten Bugs gefunden: Reset_Current() wurde als allererste Aktion in Item_Scope aufgerufen, NOCH BEVOR die angeklickte Zeile ermittelt wird. Reset_Current() ruft DT_CURR_WF_ITEMS.Clear() auf - und DT_CURR_WF_ITEMS ist über bindsourcegrid direkt die Datenquelle von GridControlWorkflows/GridViewWorkflows (siehe Bindings z.B. frmMain.vb:1445-1446). Das Clear() leert also synchron genau das Grid, in dem gerade doppelgeklickt wurde, bevor CalcHitInfo/FocusedRowHandle überhaupt ausgewertet werden - beide sind danach zwangsläufig InvalidRowHandle, da schlicht keine Zeilen mehr existieren. Das erklärt auch die im Log beobachteten doppelten SaveGridLayout-Aufrufe (Grid reagiert auf die Leerung) und das spätere "has no children" beim Rendern der Gruppenzeilen. Der zuvor implementierte FocusedRowHandle-Fallback in Item_Scope war dadurch wirkungslos, da auch FocusedRowHandle zu diesem Zeitpunkt ungültig ist. Fix: Den verfrühten Reset_Current()-Aufruf entfernt. Die davon zurückgesetzten Felder werden im weiteren Verlauf ohnehin frisch gesetzt (CURRENT_JUMP_DOC_GUID erneut bei Zeile ~2735, CURRENT_ProfilGUID durch Load_Profil_from_Grid selbst). Der zweite, bestehende Reset_Current()-Aufruf im GRUPPE-Zweig (nach erfolgreicher Zeilenauflösung, vor Load_Profil_from_Grid) bleibt unverändert bestehen und deckt den eigentlich benötigten Reset weiterhin ab. Enthält zusätzlich eine Diagnose-Logzeile in GridViewWorkflows_MouseDown, die beim Testen ergänzt wurde. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2522,7 +2522,13 @@ Public Class frmMain
|
||||
|
||||
Try
|
||||
LOGGER.Info("Starting Profile Loading")
|
||||
Reset_Current()
|
||||
' WICHTIG: Reset_Current() NICHT hier aufrufen! DT_CURR_WF_ITEMS ist über
|
||||
' bindsourcegrid die Datenquelle von GridControlWorkflows/GridViewWorkflows -
|
||||
' Reset_Current() leert sie (DT_CURR_WF_ITEMS.Clear()), was das Grid, in dem
|
||||
' gerade geklickt wurde, synchron auf 0 Zeilen setzt, BEVOR der Hit-Test unten
|
||||
' überhaupt läuft. Das macht effectiveRowHandle/FocusedRowHandle-Fallback
|
||||
' zwangsläufig ungültig. Reset_Current() wird stattdessen weiter unten
|
||||
' (GRUPPE-Zweig) erst NACH erfolgreicher Zeilenauflösung aufgerufen.
|
||||
|
||||
' ========== UI-VORBEREITUNG ==========
|
||||
Me.UseWaitCursor = True
|
||||
@@ -3545,6 +3551,7 @@ Public Class frmMain
|
||||
Dim view As GridView = sender
|
||||
Dim hi As GridHitInfo = view.CalcHitInfo(e.Location)
|
||||
Dim groupRowButtonClicked = (hi.HitTest = GridHitTest.RowGroupButton)
|
||||
LOGGER.Debug($"MouseDown: RowHandle=[{hi.RowHandle}], HitTest=[{hi.HitTest}], InGroupRow=[{hi.InGroupRow}], InDataRow=[{hi.InDataRow}], GroupRowButtonClicked=[{groupRowButtonClicked}]")
|
||||
' ===== UNGÜLTIGE CLICKS ABFANGEN =====
|
||||
' Anders als in Item_Scope ist hier KEIN FocusedRowHandle-Fallback sinnvoll:
|
||||
' e.Location ist immer aktuell (kein Caching-Problem), und InvalidRowHandle ist
|
||||
|
||||
Reference in New Issue
Block a user