Ich glaube, du solltest dieses Event nutzen:
delayed_changed_sel_callback
Das Event wird nach einer einstellbaren Zeit ausgelöst, sobald etwas markiert wurde.
Dann kannst du genau auf das Grid reagieren (du bekommst es als SENDER automatisch in die Behandlermethode geliefert) und kannst zudem in allen anderen Grids die Selektion löschen.
Ich benutze das hier:
Autosumme in ALV-Grid – Version 1
Das Entmarkieren kannst du dir leicht generisch programmieren:
du sammelst alle verwendeten Grid-Instanzen in einer Tabelle.
In dem delayed_changed_sel_callback rufst du deine Methode CLEAR_SELECTION auf und übergibst das akutelle Grid.
Dann machst du in er Methode ein LOOP über alle Grid-Instanzen. IF Tabelle-Instanz <> übergebene_Instanz, dann tabelle-instanz->clear_selection( ).
Du kannst übrigens bei der Erzeugung des Grids einstellen, ob markiert werden darf oder nur EINE Zeile oder mehrere Zeilen!
Du musst nicht abfragen, ob "Viele" oder "Eine".
https://keremkoseoglu.wordpress.com/200 ... s-in-abap/
Ausserdem frage ich immer auch noch die selektierte Zelle ab, falls keine Zeile markiert wurde (get_current_cell).
Das macht dem Anwender in der täglichen Arbeit vieles einfacher. Weil man intuitiv häufig in einer Liste einen relevanten Wert markiert und dann Infos dazu möchte. Man markiert aber nicht intuitiv die Zeile...
Wenn man dann auf eine Funktion klickt und erst die Meldung bekommt: "Es ist keine Zeile markiert", dann nervt das.