Dgv Edit Mode Reentrant Call

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    Dgv Edit Mode Reentrant Call

    Hi,

    ich habe ein Problem, dass wohl etwas komplex ist. Ich hoffe, ihr habt Geduld.

    Ich verwende eine DGV DgvRecipients und ändere dort den Inhalt einer Zelle.

    Im EndEdit Event führe ich Prüfungen durch. Unter bestimmten Umständen will ich dann die DGV vollkommen neu aufbauen.

    Dazu rufe ich als erstes die Anweisung:

    VB.NET-Quellcode

    1. DgvRecipients.Rows.Clear()


    Das klappt auch ohne Probleme, wenn ich den EditMode mit der ENTER Taste beende.

    Wenn ich den Edit Mode aber dadurch beende, indem ich mit der MOUSE Taste auf eine andere Zelle der DGV klicke, dann erhalte ich eine Exception, mit der Meldung, dass ich einen "reentrant call in der SetCurrentCellAddressCoreFunction" ausgelöst hätte (s. Anhang).

    Irgendwie scheint durch den ENTER Befehl, die Current Cell Address verändert zu werden. Ich hab deshalb vor dem Rows.Clear testweise die folgende Anweisung eingefügt:

    VB.NET-Quellcode

    1. DgvRecipients.CurrentCell = Nothing
    2. 'RebuildDgvRecipients()


    und erhalte jetzt mit dieser Anweisung den gleichen Fehler.

    Hier fehlt mir das Verständnis, wie der DGV EditMode funktioniert und wie er beendet wird. Vielleicht kann mir jemand nachsichtig weiter helfen.

    LG
    Peter
    Bilder
    • s 2023-05-24 10-56-510.jpg

      98,81 kB, 1.297×640, 31 mal angesehen
    @Peter329 Sieh Dir mal die Aufrufliste an, das sieht nach einem rekursiven Aufruf aus.
    Und:
    Warum hast Du die Daten nicht in einer DataTable und bindest diese an das DGV?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Der bei mir beliebte Delay-Workaround kann auch hier weiterhelfen:

    VB.NET-Quellcode

    1. Private Async Sub BuildDgvRecipients()
    2. '…
    3. Await Threading.Tasks.Task.Delay(1)
    4. DgvRecipients.Rows.Clear()
    5. '…
    6. End Sub
    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.

    VaporiZed schrieb:

    Der bei mir beliebte Delay-Workaround kann auch hier weiterhelfen:


    Hat bei mir auch auf Anhieb weitergeholfen ! :)

    Das muss man wissen ... sonst kann man lange suchen. Vielen Dank ! Problem gelöst !

    LG
    Peter