Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

How I can update data in ALV GRID?

Former Member
0 Kudos

Hi all,

I have to update data in an ALV GRID and only one column is editable. I've exclude insert and delete row pushbutton, and I inserted a save pushbutton.

What I have to write under the "save function" to update my internal table displayed in ALV GRID?

Thanks advance

Christian

Message was edited by: Christian Marchiol

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

Internal table will get updated upon calling a method

CHECK_CHANGED_DATA method from ALV GRID class..

If you are using OO, then in your user_command event handler method have a call to CHECK_CHANGED_DATA method..

If you are using REUSE_ALV_GRID_DISPLAY fm for your GRID display then do the following in your USER_COMMAND for SAVE function..

Data ref_grid type ref to cl_gui_alv_grid.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

IMPORTING

E_GRID = ref_grid.

call method ref_grid->check_changed_data...

Hope this helps..

Sri

Message was edited by: Srikanth Pinnamaneni

5 REPLIES 5

Former Member
0 Kudos

Hi,

Internal table will get updated upon calling a method

CHECK_CHANGED_DATA method from ALV GRID class..

If you are using OO, then in your user_command event handler method have a call to CHECK_CHANGED_DATA method..

If you are using REUSE_ALV_GRID_DISPLAY fm for your GRID display then do the following in your USER_COMMAND for SAVE function..

Data ref_grid type ref to cl_gui_alv_grid.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

IMPORTING

E_GRID = ref_grid.

call method ref_grid->check_changed_data...

Hope this helps..

Sri

Message was edited by: Srikanth Pinnamaneni

Former Member
0 Kudos

Christian,

Ideally you don't have to write anything in the code for an editable grid for updating the internal table.

If you see some problem, you can fire the method CHECK_CHANGED_DATA in the PAI and your table should get updated.

Regards,

Ravi

Note : Reward the posts that help you.

0 Kudos

I don't know.

I've checked in DEBUG mode and when I click on save (in the PAI module), the internal table haven't data modified.

For example: the field qta have value 15. I change it in 18 and then press Save. In debug, the field qta still have the value 15.

Whay I have to do?

former_member188685
Active Contributor
0 Kudos
REPORT  ZTESTDFALV1                             .
 
*Data Declaration
*----------------
DATA: BEGIN OF T_EKKO,
  EBELN TYPE EKPO-EBELN,
  EBELP TYPE EKPO-EBELP,
 END OF T_EKKO.
 
DATA: BEGIN OF IT_EKKO OCCURS 0.
        INCLUDE STRUCTURE T_EKKO.
DATA: END OF IT_EKKO.
 
DATA: BEGIN OF IT_BACKUP OCCURS 0.
        INCLUDE STRUCTURE T_EKKO.
DATA: END OF IT_BACKUP.
*ALV data declarations
TYPE-POOLS: SLIS.                                 "ALV Declarations
DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GD_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GD_REPID     LIKE SY-REPID.
 
 
************************************************************************
*Start-of-selection.
START-OF-SELECTION.
 
  PERFORM DATA_RETRIEVAL.
  PERFORM BUILD_FIELDCATALOG.
  PERFORM BUILD_LAYOUT.
  IT_BACKUP[] = IT_EKKO[].
  PERFORM DISPLAY_ALV_REPORT.
 
 
*&--------------------------------------------------------------------*
*&      Form  build_fieldcatalog
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM BUILD_FIELDCATALOG.
  REFRESH FIELDCATALOG.
  CLEAR FIELDCATALOG.
*
 
  FIELDCATALOG-FIELDNAME   = 'EBELN'.
  FIELDCATALOG-SELTEXT_M   = 'Purchase Order'.
  FIELDCATALOG-INPUT     = 'X'.
  FIELDCATALOG-EDIT     = 'X'.
  FIELDCATALOG-COL_POS     = 2.
  APPEND FIELDCATALOG.
  CLEAR  FIELDCATALOG.
 
  FIELDCATALOG-FIELDNAME   = 'EBELP'.
  FIELDCATALOG-SELTEXT_M   = 'PO Item'.
  FIELDCATALOG-COL_POS     = 3.
  APPEND FIELDCATALOG.
  CLEAR  FIELDCATALOG.
 
ENDFORM.                    " BUILD_FIELDCATALOG
 
 
*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       Build layout for ALV grid report
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT.
  "Permet d'ajuster les colonnes au text
*  gd_layout-colwidth_optimize = 'X'.
  GD_LAYOUT-TOTALS_TEXT       = 'Totals'(201).
 
*  gd_layout-box_fieldname = 'SELECT'.
*  gd_layout-box_tabname   = 'IT_EKKO'.
 
ENDFORM.                    " BUILD_LAYOUT
 
 
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*       Display report using ALV grid
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_REPORT.
  GD_REPID = SY-REPID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            I_CALLBACK_PROGRAM        = GD_REPID
*            i_callback_top_of_page   = 'TOP-OF-PAGE'
            I_CALLBACK_PF_STATUS_SET  = 'SET_PF_STATUS'
            I_CALLBACK_USER_COMMAND   = 'USER_COMMAND'
*            i_grid_title             = 'My Title'
            IS_LAYOUT                 = GD_LAYOUT
            IT_FIELDCAT               = FIELDCATALOG[]
       TABLES
            T_OUTTAB                  = IT_EKKO
       EXCEPTIONS
            PROGRAM_ERROR             = 1
            OTHERS                    = 2.
 
  IF SY-SUBRC <> 0.
    WRITE:/ SY-SUBRC.
  ENDIF.
 
ENDFORM.                    " DISPLAY_ALV_REPORT
 
 
*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVAL
*&---------------------------------------------------------------------*
*       Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
FORM DATA_RETRIEVAL.
  SELECT EBELN EBELP
   UP TO 10 ROWS
    FROM EKPO
    INTO CORRESPONDING FIELDS OF TABLE  IT_EKKO.
ENDFORM.                    " DATA_RETRIEVAL
 
 
*----------------------------------------------------------------------*
*                      FORM SET_PF_STATUS                              *
*----------------------------------------------------------------------*
FORM SET_PF_STATUS USING RT_EXTAB   TYPE  SLIS_T_EXTAB.
  <b>SET PF-STATUS 'STANDARD_FULLSCREEN1' EXCLUDING RT_EXTAB.</b>
ENDFORM.                    "set_pf_status
 
 
*&--------------------------------------------------------------------*
*&      Form  user_command
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->R_UCOMM    text
*      -->RS_SELFIELDtext
*---------------------------------------------------------------------*
FORM USER_COMMAND  USING R_UCOMM LIKE SY-UCOMM
                         RS_SELFIELD TYPE SLIS_SELFIELD.
 
 
 <b> DATA: GD_REPID LIKE SY-REPID, "Exists
  REF_GRID TYPE REF TO CL_GUI_ALV_GRID. "new
</b> 
*then insert the following code in your USER_COMMAND routine...
 
 
  <b>IF REF_GRID IS INITIAL.
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
      IMPORTING
        E_GRID = REF_GRID.
  ENDIF.
 
  IF NOT REF_GRID IS INITIAL.
    CALL METHOD REF_GRID->CHECK_CHANGED_DATA
      .
  ENDIF.</b> 
 
 
  CASE R_UCOMM.
    WHEN '&IC1'.
      CHECK RS_SELFIELD-TABINDEX > 0.
      IF RS_SELFIELD-VALUE EQ '6000000001'.
        CALL TRANSACTION 'ZDF2'.
      ENDIF.
    WHEN 'REFRESH'.
 
      READ TABLE IT_EKKO INDEX  RS_SELFIELD-TABINDEX.
      IF SY-SUBRC = 0.
        READ TABLE IT_BACKUP INDEX RS_SELFIELD-TABINDEX.
        IF SY-SUBRC = 0.
          IF IT_EKKO <> IT_BACKUP.
*  then do your check
          ENDIF.
        ENDIF.
      ENDIF.
 
      PERFORM DATA_RETRIEVAL.
      RS_SELFIELD-REFRESH = 'X'.
  when 'SAVE'.
***do your save**
  ENDCASE.
ENDFORM.                    "user_command

concentrate on Bold....

regards

vijay

Former Member
0 Kudos

Hi Christian,


when 'save'.

 perform update_table.

form update_table.

  update <<b>table_name</b>> from table gt_outtab.
  call method g_grid->set_ready_for_input
      exporting
          i_ready_for_input = 0.
endform.

hope this helps you.

reward points for helpfull answers and close the thread if your question is solved.

regards,

venu.