Laden...

DataGridViewComboBocColumn: Auswahl wird nicht sofort übernommen

Erstellt von telfa vor 11 Jahren Letzter Beitrag vor 11 Jahren 659 Views
t
telfa Themenstarter:in
156 Beiträge seit 2012
vor 11 Jahren
DataGridViewComboBocColumn: Auswahl wird nicht sofort übernommen

Hallo an alle,
in einem DataGridView befindet sich eine ComboBox-Column, über die Anwender einen Typ auswählen können. Das funktioniert soweit auch gut. Num meldet sich ein Anwender und schreibt dass, wenn er eine Auswahl trifft und sofort den Speicher-Button betätigt, der Datensatz nicht mit dem neu ausgewählten, sondern mit dem vorigen Wert gespeichert wird. Ein Test zeigt mir das dem so ist. Eine Auswahl vornehmen, sofot speichern anclicken und der geänderte Wert ist noch nicht übernommen.

Als Lösing habe ich jetzt ein SelectedIndexChanged-Event für die ComboBox abonniert und in diesem Event eine andere Spalte als die aktive benannt, um den Edit-Vorgang zu beenden. EIn einfaches DataGridView.EndEdit() hat leider nicht geholfen. Diese Lösung funktioniert auch. Aber: erst ab der zweiten Auswahl. Bei der ersten Auswahl wird zwar die benannte Spalte aktiviert, aber die neue Auswahl nicht übernommen.

Hat jemand hierzu Erfahrungen?

Viele Grüße,
Karl

s
93 Beiträge seit 2008
vor 11 Jahren

Ich kenne diesen Effekt auch.
Der tritt beim Grid auf, wenn direkt aus einer Zeile, deren Editiervorgang noch nicht abgeschlossen ist, auf Speichern gedrückt wird. EndEdit() funktioniert merkwürdigerweise nicht immer.

Ich hab das so gelöst, daß ich meine eigene EndEdit()-Methode implementiert habe, die ich vor dem Speichern aufrufe. Im Prinzip auch nur eine andere Zelle (Spalte, oder bei einspaltigen Grids eine andere Zeile) aktiviere, dann aber wieder die usrsprüngliche Zelle aktiviere, damit optisch der alte Zustand wieder hersgestellt wird, falls der User weiter editieren will, und dann seine aktuelles sucht.

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo telfa,

ich kenne das Phänomen nicht, aber möglicherweise ist das EndEdit einfach noch nicht abgeschlossen, wenn das Speichern beginnt. Ihr könntet versuchen, das Speichern per Control.BeginInvoke aufzurufen und damit dem EndEdit mehr Zeit zu geben. Das Prinzip ist in [FAQ] Bestimmte Aktionen bis nach der laufenden GUI-Event-Behandlung verzögern beschrieben.

herbivore