ALV-Grid: handle_data_changed: geänderten Wert bearbeiten

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

ALV-Grid: handle_data_changed: geänderten Wert bearbeiten

Postby Pelin2735 » Fri May 17, 2013 9:32 am

Hallo liebe Community,

ich habe ein Problem in der Methode handle_data_changed meines ALV-Grids.
Das Ereignis wir korrekt ausgelöst und alle Zelle bis auf die aktuelle Zelle(also die Zelle die geändert wurde) lassen sich ändern. Beim Ändern des Wertes wird die Datentabelle korrekt beschrieben, auch nach dem Aufruf von alv_grid->refresh_table_display stehen in ihr noch der richtige (von mir bearbeitete) Wert.
Im ALV-Grid zeigt er diese Änderung allerdings nicht an. Es muss was mit Zelle auf sich haben, die geändert wurde.

Hier der Quelltext von handle_data_changed.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.   METHOD handle_data_changed.
  2. ******************************************
  3. *** HandleDataChanged                  ***
  4. ******************************************
  5.     DATA: ls_good         TYPE lvc_s_modi.
  6.  
  7. *** alle Inhalte der geänderten Zellen in die interne Tabelle schreiben
  8.     LOOP AT er_data_changed->mt_good_cells INTO ls_good.
  9. *** Dazu auf die richtige Zeile in der ITAB positionieren:
  10.       READ TABLE <itab> ASSIGNING <wa> INDEX ls_good-row_id.
  11.       IF sy-subrc = 0.
  12. *** Und das geänderte Feld dem Feldsymbol zuweisen
  13.        
  14.           IF ls_good-fieldname EQ 'BETRAG'.
  15. *           alles außer Zahlen entfernen
  16.             REPLACE ALL OCCURRENCES OF REGEX '[^ [:digit:] ]' IN <feld> WITH ''.
  17.             UNASSIGN <feld1>.
  18.             ASSIGN COMPONENT 'ALSWORTE' OF STRUCTURE <wa> TO <feld1>.
  19.             IF <feld1> IS ASSIGNED.
  20.               CALL FUNCTION 'SPELL_AMOUNT'
  21.               EXPORTING
  22.                 amount = <feld>
  23.                 language = sy-langu
  24.                 currency = 'EUR'
  25.               IMPORTING
  26.                 in_words = spell.
  27.               IF spell-decword EQ 'NULL'.
  28.                 CONCATENATE spell-word 'EURO' INTO <feld1> SEPARATED BY space.
  29.               ELSE.
  30.                 CONCATENATE spell-word 'EURO' spell-decword 'CENT' INTO <feld1> SEPARATED BY space.
  31.               ENDIF.
  32. *              WRITE <feld> TO <feld> USING EDIT MASK 'RR___.___,__'.
  33.               CONCATENATE 'E1' <feld> INTO <feld> SEPARATED BY space.
  34.             ENDIF.
  35.           ENDIF.
  36.         ENDIF.
  37.       ENDIF.
  38.     ENDLOOP.
  39.     IF sy-subrc EQ 0.
  40. *     Anzeige refreshen
  41.       DATA stable TYPE lvc_s_stbl.
  42.       stable-col = 'X'.
  43.       stable-row = 'X'.
  44.       CALL METHOD alv_grid->refresh_table_display
  45.         EXPORTING
  46.           is_stable = stable.
  47.     ENDIF.
  48.   ENDMETHOD.                    "handle_data_changed
  49.  
GeSHi ©


Das Feld ALSWORTE wird korrekt gefüllt und im Grid angezeigt.
Selbst nach dem Refresh hat <itab> noch den richtigen Inhalt.
Hat jemend eine Idee wie ich das lösen kann?
Pelin2735
..
..
 
Posts: 28
Joined: Wed Jan 16, 2013 2:13 pm

Re: ALV-Grid: handle_data_changed: geänderten Wert bearbeite

Postby Josie2243 » Tue May 21, 2013 5:25 am

LoDee hat geschrieben:Hat jemend eine Idee wie ich das lösen kann?


Benutz die Methode so wie Sie gedacht ist!

Du kannst Prüfungen für die Eingaben machen und Fehlermeldungen ins Protokoll aufnehmen. Wenn du Feldwerte ändern möchtest, dann machst du das ebenfalls über das Protkoll. Also per Methode CL_ALV_CHANGED_DATA_PROTOCOL=>MODIFY_CELL.

Ein Refresh brauchst du eigentlich nie, dies bringt den ALV meist nur durcheinander.
Josie2243
....
....
 
Posts: 908
Joined: Wed Feb 15, 2006 4:05 pm

Re: ALV-Grid: handle_data_changed: geänderten Wert bearbeite

Postby Pelin2735 » Thu May 23, 2013 7:39 am

Hallo Hendrik,

ich hätte da noch eine Frage, die Fehlermeldung nehme ich ins Protokoll auf in handle_data_change
dann wollte ich auch in handle_data_change den Wert mit modify_cell ändern.
Dabei kommt immer ein laufzeitfehler, weil Mp_mod_rows in modify_cell noch inital ist.
finde auch irgendwie kein beispiel dafür. ich will halt aus einer eingabe von '10000' z.b. '100,00 EUR' machen.
Pelin2735
..
..
 
Posts: 28
Joined: Wed Jan 16, 2013 2:13 pm


Return to ABAP Objects®

Who is online

Users browsing this forum: No registered users and 6 guests