SAP ALV DATA_CHANGED_FINISHED事件实现后排序筛选等按钮弹窗异常的解决方法(筛选排序等按钮)

实现DATA_CHANGED_FINISHED功能后,筛选排序等按钮弹窗异常过滤条件不能自动带入选中的列

  • 异常
    1
  • 正常
    2

修正步骤

  1. LCL_EVENT_RECEIVER定义中设置PRIVATE变量REFRESH
  2. 实现 DATA_CHANGED 事件,并在事件中设置REFRESH = ‘X’.
  3. 实现 DATA_CHANGED_FINISHED 事件,并在事件中判断REFRESH值,决定是否刷新ALV
  4. 注册 DATA_CHANGED DATA_CHANGED_FINISHED 事件

修正代码

*________________________________类定义_______________________________*
CLASS LCL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    DATA: UCOMM TYPE SY-UCOMM.

    METHODS HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
      IMPORTING ER_DATA_CHANGED.

    METHODS HANDLE_DATA_CHANGED_FINISHED FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
      IMPORTING E_MODIFIED ET_GOOD_CELLS.

  PRIVATE SECTION.
    DATA  REFRESH TYPE C.

ENDCLASS.

CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
  METHOD HANDLE_DATA_CHANGED_FINISHED.

    PERFORM FRM_WHEN_CHANGED_FINISHED
    USING E_MODIFIED ET_GOOD_CELLS.

    IF REFRESH = 'X'.
      PERFORM REFRESH_TABLE_DISPLAY.
      CLEAR REFRESH.
    ENDIF.
  ENDMETHOD.

  METHOD HANDLE_DATA_CHANGED.
    REFRESH = 'X'.
  ENDMETHOD.
ENDCLASS.

*________________________________Form_______________________________*
FORM FRM_WHEN_CHANGED_FINISHED  USING P_E_MODIFIED P_ET_GOOD_CELLS.

  IF P_ET_GOOD_CELLS IS NOT INITIAL.
    DATA: LS_ROW_ID TYPE LVC_S_ROW.
    CALL METHOD GV_GRID->GET_CURRENT_CELL
      IMPORTING
        ES_ROW_ID = LS_ROW_ID.
    IF LS_ROW_ID IS NOT INITIAL.
      CLEAR: GS_RB06.
      READ TABLE GT_RB06 INTO GS_RB06 INDEX LS_ROW_ID.
      MODIFY GT_RB06 FROM GS_RB06 TRANSPORTING ZDJXH WHERE MATNR = GS_RB06-MATNR.
    ENDIF.
  ENDIF.
ENDFORM.

FORM REFRESH_TABLE_DISPLAY.
  DATA: IS_STABLE TYPE LVC_S_STBL.
  IS_STABLE-ROW = 'X'.
  IS_STABLE-COL = 'X'.
  CALL METHOD GV_GRID->REFRESH_TABLE_DISPLAY( EXPORTING IS_STABLE = IS_STABLE ).
ENDFORM.

猜你喜欢

转载自blog.csdn.net/qq_30797051/article/details/120199261