ALV Refresh Table Display funktioniert nicht.

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

ALV Refresh Table Display funktioniert nicht.

Beitrag von Ichse2 (ForumUser / 8 / 3 / 0 ) » 21.02.2020 13:02
Hallo zusammen,

ich habe ein Problem im Bezzug auf den Refresh im CL_GUI_ALV_GRID.
Ich hatte die aufgabe ein Sudoku zu bauen. Dabei bi n ich schon sehr weit, jedoch will ich, dass wenn man eine zweistellige zahl oder einen Buchstaben eingibt eine Fehlermeldung kommt und der Alv das letzte Feld in das eingetragen wurde löscht.
Hier ein Ausschnitt:

Code: Alles auswählen.

*******************************************************************
*Zahlenprüfung
*******************************************************************
  IF <lf_feld> NA '123456789'.
    MESSAGE text-002 TYPE 'I'.
    <lf_feld> = ' '.
    MODIFY gt_feld FROM ls_feld INDEX ls_changed-row_id.

    me->refresh( ).

*    gr_alv->refresh_table_display( ).
  ENDIF.


  lf_laenge = strlen( <lf_feld> ).

*******************************************************************
*Längenprüfung
*******************************************************************
  IF lf_laenge > 1.
    MESSAGE text-001 TYPE 'I'.
    <lf_feld> = ' '.
    MODIFY gt_feld FROM ls_feld INDEX ls_changed-row_id.
    CALL METHOD gr_alv->refresh_table_display.
  ENDIF.
So. In meiner Methode Refresh mach ich bis jetzt nicht mehr als einen Refresh_table_display und einen flush(zur Sicherheit).
Das Problem: Die Tabelle die ich jetzt ausgeben will, hat das falsch eingetragene Feld schon gelöscht. Jedoch ist nach dem refresh und dem Flush in der Ausgabe der Buchstabe immer noch da.

Die Frage: Woran liegt das und wie kann ich das beheben.

Versucht hab ich auch schon einen Frontend Update einen weiteren Set_tabel_for_first_display usw...

Bitte um Hilfe Danke.


Re: ALV Refresh Table Display funktioniert nicht.

Beitrag von a-dead-trousers (Top Expert / 3391 / 102 / 867 ) » 21.02.2020 20:15
In diesem Fall wäre es besser du verwendest rein nur die Control-Funktionen die das ALV-Grid für die Datenänderung zur Laufzeit zu Verfügung stellt. Wenn du zwischendrin mit PAI/PBO herumhantierst kommen solche Inkonsistenzen zustande.

Du musst den Event DATA_CHANGED des ALV-Grid für das komplette Handling der Feldprüfungen und Änderungen verwenden.
Hier ist ein Beispiel, damit du ungefähr verstehst was du alles brauchst.
https://www.berater-wiki.de/Klasse_CL_G ... enthandler
Wichtig ist vorallem das REGISTER_EDIT_EVENT für MC_EVT_MODIFIED (Prüfen der Änderung beim Verlassen der Zelle) und dass du mit CL_ALV_CHANGED_DATA_PROTOCOL (ER_DATA_CHANGED im Event) auch Werte wieder in das Grid zurückschreiben kannst.
Im Netz gibts dazu noch einiges mehr.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
deejey (22.02.2020 18:35)

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: ALV Refresh Table Display funktioniert nicht.

Beitrag von Ichse2 (ForumUser / 8 / 3 / 0 ) » 24.02.2020 09:16
a-dead-trousers hat geschrieben:
21.02.2020 20:15
In diesem Fall wäre es besser du verwendest rein nur die Control-Funktionen die das ALV-Grid für die Datenänderung zur Laufzeit zu Verfügung stellt. Wenn du zwischendrin mit PAI/PBO herumhantierst kommen solche Inkonsistenzen zustande.

Du musst den Event DATA_CHANGED des ALV-Grid für das komplette Handling der Feldprüfungen und Änderungen verwenden.
Hier ist ein Beispiel, damit du ungefähr verstehst was du alles brauchst.
https://www.berater-wiki.de/Klasse_CL_G ... enthandler
Wichtig ist vorallem das REGISTER_EDIT_EVENT für MC_EVT_MODIFIED (Prüfen der Änderung beim Verlassen der Zelle) und dass du mit CL_ALV_CHANGED_DATA_PROTOCOL (ER_DATA_CHANGED im Event) auch Werte wieder in das Grid zurückschreiben kannst.
Im Netz gibts dazu noch einiges mehr.

Danke erstmal für die schnelle Antwort...
jedoch schaut es so aus, dass es auch nciht dann geht wenn ich alles in die DATA_CHANGED Methode schreibe. Das REGISTER_EDIT_EVENT für MC_EVT_MODIFIED hab ich auch verwendet, und das REGISTER_EDIT_EVENT für MC_EVT_ENTER auch.
Funktioniert irgendwie alles nicht. Meine Frage: Kann es daran liegen dass meine Tabelle und mein Feldkatalog global ist? Nein oder?
Global sind beide weil ich sie immer wieder in versch. Methoden verwende und benötige.
Danke schonmal für die Antwort. :D

Re: ALV Refresh Table Display funktioniert nicht.

Beitrag von Ichse2 (ForumUser / 8 / 3 / 0 ) » 24.02.2020 09:44
AKTUALISIERUNG:
Kleine Erkenntnis: Wenn ich im Debugger durchgehe und über den Flush gehe, verschwindet das zeichen auf meiner Ausgabetabelle. Das Problem ist wenn ich dann ganz durchgehe, ist das Zeichen wieder in der Ausgabetabelle zu sehen, obwohl ich danach den ALV Nicht merh veränder. Hier der Code zur besseren Vorstellung:

Code: Alles auswählen.

**********************************************************************
*Zahlenprüfung
**********************************************************************
    IF <lf_feld> NA '123456789'.
      MESSAGE text-002 TYPE 'I'.
      <lf_feld> = ' '.
      MODIFY gt_feld FROM ls_feld INDEX ls_changed-row_id.



      gr_alv->refresh_table_display( ).

      cl_gui_cfw=>flush( ).


    ENDIF.

Re: ALV Refresh Table Display funktioniert nicht.

Beitrag von a-dead-trousers (Top Expert / 3391 / 102 / 867 ) » 24.02.2020 10:43
Lass das "refresh_table_display" und das "flush" weg.
Das sind die Methoden für das PAI/PBO.
Zur korrekten Datenänderung darfst du nur die Inhalte in mt_mod_cells verändern.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: ALV Refresh Table Display funktioniert nicht.

Beitrag von Ichse2 (ForumUser / 8 / 3 / 0 ) » 02.03.2020 08:48
a-dead-trousers hat geschrieben:
24.02.2020 10:43
Lass das "refresh_table_display" und das "flush" weg.
Das sind die Methoden für das PAI/PBO.
Zur korrekten Datenänderung darfst du nur die Inhalte in mt_mod_cells verändern.
Okay, aber wie bekomm ich das dann in meine Ausgabe??
Also nur weil ich es in der mt_mod_cells wieder auf leer ändere, ändert sich ja nichts in meiner Ausgabe. Wie bekomm ich das dann da hin.

Re: ALV Refresh Table Display funktioniert nicht.

Beitrag von ewx (Top Expert / 4167 / 185 / 429 ) » 02.03.2020 17:12
Ichse2 hat geschrieben:
02.03.2020 08:48
Also nur weil ich es in der mt_mod_cells wieder auf leer ändere, ändert sich ja nichts in meiner Ausgabe.
doch. normalerweise schon.

Seite 1 von 1