Nein, wenn ich zum Beispiel drei Dropdowns (das sind die einzigen editierbaren Felder) ändere und dann einen Button drücke, habe ich die ersten zwei Änderungen in der itab hinter dem ALV drin, die dritte aber nicht - weil ich das Feld nicht verlassen habe, bevor ich den Button geklickt habe. Diesen Fall muss ich irgendwie abfangen. Und ja: Das "Flackern" des Feldes ist doof.a-dead-trousers hat geschrieben:Ich würde das aber in der Form sowieso nicht empfehlen. Wenn eh schon der LVC zum Einsatz kommt gibts ja auch ein Rahmenprogramm und da muss man nicht jedesmal auf den ENTER reagieren sondern nur beim Verlassen der Anzeige EINMAL die Methode CHECK_CHANGED_DATA vom Grid aufrufen und die Daten sind komplett da.
Reicht es nicht aus im CALLBACK_USER_COMMAND die geänderten Werte mittels:ralf.wenze hat geschrieben:lNein, wenn ich zum Beispiel drei Dropdowns (das sind die einzigen editierbaren Felder) ändere und dann einen Button drücke, habe ich die ersten zwei Änderungen in der itab hinter dem ALV drin, die dritte aber nicht - weil ich das Feld nicht verlassen habe, bevor ich den Button geklickt habe. Diesen Fall muss ich irgendwie abfangen.
Code: Alles auswählen.
DATA: l_ref_alv TYPE REF TO cl_gui_alv_grid,
l_valid TYPE char01.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = l_ref_alv.
CALL METHOD l_ref_alv->check_changed_data
IMPORTING
e_valid = l_valid.
IF l_valid IS INITAL.
EXIT. "Eingabefehler wurde festestellt -> ALV sendet Fehlerprotokoll an User -> keine weitere Verarbeitung
ENDIF.
Bei der Listbox muss man auch zwei mal klicken!ralf.wenzel hat geschrieben:Alles andere führt zu Klickorgien (z. B. Satz auswählen, Button "Status ändern" klicken (Popup mit Werteliste erscheint), Status aus Liste auswählen - das sind vier Klicks (oder zwei Klicks und ein Doppelklick) im Vergleich zu einem Klick bei der Auswahl aus der Listbox).
Wobei man das doch nur braucht, wenn die Änderung in Spalte1 direkt die Eingabe in Spalte2 beinflussen soll (z.B.: nur bei Status Error wird Splate2 für den Fehlertext zur Eingabe freigeschaltet).a-dead-trousers hat geschrieben:Ja, aber der CALLBACK wird nur ausgelöst, wenn der Benutzer z.B. eine Taste gedrückt hat (Eben das erwähnte ENTER)
Mann kann das Callback, wie ich auch schon erwähnt hab, mit den MC_EVT_ENTER bzw. MC_EVT_CHANGED Events direkt bei der Änderung eines Feldes anstoßen nur dann flackert das ALV und der Cursor "springt" uU zwischen den Feldern hin und her.