Laden...

DataGridView.SelectionChanging oder BindingSource.PositionChanging abfangen

Erstellt von citizen.ron vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.620 Views
citizen.ron Themenstarter:in
432 Beiträge seit 2005
vor 16 Jahren
DataGridView.SelectionChanging oder BindingSource.PositionChanging abfangen

Hallo zusammen,

Situation
Ein DataGridView ist auf FullRowSelect eingestellt und bildet lediglich den Selektor für ein UserControl, in dem dann die eigentlichen Datenfelder einzeln bearbeitet werden; das Datengitter ist also nicht zum Schreiben gedacht.

Ich will manchmal verhindern, dass im Datengitter eine andere Zeile ausgewählt wird (z.B. weil die gemachten Angaben im Unterformular noch nicht vollständig sind.

Problem
Sowohl DataGridView als auch BindingSource bieten nur Ereignisse an, bei denen das Kind schon in den Brunnen gefallen ist:*BindingSource.PositionChanged ist schon zu spät *DataGridView.Validating findet nicht statt, weil im Datengitter nicht geschrieben wird *DataGridView.RowEnter ist zwar rechtzeitig, tritt aber auch auf, wenn man mit dem Fokus ins Gitter zurückkehrt und in die gleiche Zeile klickt und außerdem bietet es kein Cancel an *DataGridView.SelectionChanged ist zu spät: die BindingSource hat hier ihre Position bereits gewechselt *Die Ereignisse SelectionChanging bzw. PositionChanging sind leider nicht vorhande (was ich übrigens ziemlich Banane finde)

Bis jetzt so gelöst
Im RowEnter-Ereignis ist SelectedRows[0] die soeben "betretene" Zeile.
Zu dieser Zeit ist CurrentRow noch die alte Zeile.
Ich klinke mich hier mit einem selbst definierten Ereignishandler ein, der Cancel erlaubt. Wird gecancelt, merke ich mir intern die "alte" BindingSource-Position und verarbeite dann im SelectionChanged-Ereignis die gemerkte Position, indem ich die BindingSource wieder auf die alte Position zurücksetze.

Wie man sich denken kann, hat das aber den Nachteil, dass BindingSource.PositionChanged natürlich trotzdem gefeuert wird (und mit dieser Technik auch noch zweimal) und daher nicht mehr für andere Zwecke vernünftig genutzt werden kann.

Hat jemand von Euch eine Idee, wo man da konzeptionell einsetzt und wie man das besser lösen könnte?

Danke für Eure Meinung
Ron