• ALV OO 整理


    1、获得光标所在alv的方法

    *&---------------------------------------------------------------------*   
    *&   获得光标所在ALV的方法       
    *&---------------------------------------------------------------------*   
    **TOP**       
      DATA:       
        P_CONTROL  TYPE REF TO CL_GUI_CONTROL,       
        P_CONTROL1 TYPE REF TO CL_GUI_CONTROL.       
    **I01**       
    * 获得光标所在ALV       
      IF P_CONTROL IS INITIAL.       
        CREATE OBJECT P_CONTROL.       
      ENDIF.       
      CALL METHOD P_CONTROL->GET_FOCUS       
       IMPORTING       
          CONTROL      = P_CONTROL1       
       EXCEPTIONS       
          CNTL_ERROR        = 1       
          CNTL_SYSTEM_ERROR = 2.       
           
      CASE P_CONTROL1.       
    *   上ALV的场合       
        WHEN G_GRID1.       
     ……      
    *   下ALV的场合       
        WHEN G_GRID2.       
     ……      
         WHEN OTHERS.       
       ENDCASE.       

     2、 获得、设置选择行方法

    *&---------------------------------------------------------------------*   
    *&   获得,设置选择行方法   
    *&---------------------------------------------------------------------*   
    **TOP**   
      DATA:   
        G_ROWS     TYPE LVC_T_ROW,   
        G_ID       TYPE LVC_T_ROID.   
       
    **I01**   
    * 获得选择行   
      CALL METHOD G_GRID1->GET_SELECTED_ROWS   
        IMPORTING   
          ET_INDEX_ROWS = G_ROWS2   
          ET_ROW_NO     = G_ID2.         
    **O01**   
      IF NOT G_ROWS IS INITIAL AND   
         NOT G_ID IS INITIAL.   
    *   设置选择列位置   
        CALL METHOD G_GRID1->SET_SELECTED_ROWS   
          EXPORTING   
            IT_INDEX_ROWS = G_ROWS   
            IT_ROW_NO     = G_ID.   
      ENDIF.   

     3、 获得、设置当前alv光标位置

    *&---------------------------------------------------------------------*   
    *&   获得,设置当前alv光标位置   
    *&---------------------------------------------------------------------*   
    **TOP**   
      DATA: WA_COLUM      TYPE LVC_S_COL,   
            WA_ROW        TYPE LVC_S_ROID.   
    **I01**   
    * 获得当前alv光标位置   
      CALL METHOD G_GRID1->GET_CURRENT_CELL   
        IMPORTING   
          ES_COL_ID    = WA_COLUM   
          ES_ROW_NO    = WA_ROW.   
    **O01**   
    * 设置当前alv光标位置   
      CALL METHOD G_GRID1->SET_CURRENT_CELL_VIA_ID   
        EXPORTING   
          IS_COLUMN_ID = WA_COLUM   
          IS_ROW_NO    = WA_ROW.   

     4、 获得、设置左上角的行和列(固定alv行列滚动条)

    *&---------------------------------------------------------------------* 
    *&   获得,设置左上角的行和列(固定ALV行列滚动条) 
    *&---------------------------------------------------------------------* 
    **TOP** 
      DATA: WA_INFO       TYPE LVC_S_COL, 
            WA_ROW_ID     TYPE LVC_S_ROID.  
    **I01** 
    * 获得左上角的行和列(固定ALV行列滚动条) 
      CALL METHOD G_GRID1->GET_SCROLL_INFO_VIA_ID 
        IMPORTING 
          ES_COL_INFO = WA_INFO 
          ES_ROW_NO   = WA_ROW_ID.  
    **O01** 
    * 设置左上角的行和列(固定ALV行列滚动条) 
      CALL METHOD G_GRID1->SET_SCROLL_INFO_VIA_ID 
        EXPORTING 
          IS_COL_INFO = WA_INFO 
          IS_ROW_NO   = WA_ROW_ID. 

     5、 屏幕值保存方法

    *&---------------------------------------------------------------------*
    *&   画面值保存方法
    *&---------------------------------------------------------------------*
    **I01**
      DATA:
        L_VALID(1) TYPE C VALUE 'X'.

    * 保存画面值
      CALL METHOD G_GRID1->CHECK_CHANGED_DATA
          IMPORTING
            E_VALID = L_VALID.

     6、 单元格输入可否的控制方法

    *&---------------------------------------------------------------------* 
    *&   单元格入力可否的制御方法 
    *&---------------------------------------------------------------------* 
    **O01** 
    * 单元格控制可入力的场合,INPUT设置‘1’. 
      CALL METHOD G_GRID1->SET_READY_FOR_INPUT 
        EXPORTING 
          I_READY_FOR_INPUT = 1. 
     
    * 单元格控制不可入力的场合,INPUT设置‘0’. 
      CALL METHOD G_GRID1->SET_READY_FOR_INPUT 
        EXPORTING 
          I_READY_FOR_INPUT = 0. 

     7、 双击事件触发的方法

    *&---------------------------------------------------------------------*
    *&   双击事件触发方法
    *&---------------------------------------------------------------------*
    *---TOP-----*
      CLASS LCL_EVENT_HANDLER DEFINITION.
        PUBLIC SECTION.

          METHODS HANDLE_DOUBLE_CLICK
              FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
                  IMPORTING E_ROW                "行 ID
                            E_COLUMN             "列名
                            ES_ROW_NO.           "数值行 ID

    ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITION

    DATA:
      G_EVENT_HANDLER         TYPE REF TO LCL_EVENT_HANDLER,

    *---FO1-----*
    CLASS LCL_EVENT_HANDLER IMPLEMENTATION.

    * METHOD: DOUBLE CLICK
      METHOD:
        HANDLE_DOUBLE_CLICK.
        CLEAR: FLG_CHANGED.

    *   双击事件的处理
        READ TABLE IT_DATA INDEX E_ROW INTO WA_DATA.

      ENDMETHOD.                           "HANDLE_DOUBLE_CLICK

    ENDCLASS.                             "LCL_EVENT_HANDLER IMPLEMENTATION

    *---OO1-----*
    *   添加ALV事件
        CREATE OBJECT G_EVENT_HANDLER.

    *   添加ALV句柄
        SET HANDLER G_EVENT_HANDLER->HANDLE_DOUBLE_CLICK FOR G_GRID1.


      CALL METHOD G_GRID1->REGISTER_EDIT_EVENT "注册更新事件
        EXPORTING
          I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.

     8、 alv单元格值改变事件触发的方法

    *&---------------------------------------------------------------------*
    *&   ALV值改变触发检查
    *&---------------------------------------------------------------------*
    *---TOP-----*
      CLASS LCL_ALV_RECEIVER DEFINITION.
        PUBLIC SECTION.

          METHODS HANDLE_DATA_CHANGED
              FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
                  IMPORTING ER_DATA_CHANGED
                            E_ONF4
                            E_ONF4_BEFORE
                            E_ONF4_AFTER.

    ENDCLASS.                    "LCL_ALV_RECEIVER DEFINITION

    DATA:
      G_EVENT_HANDLER       TYPE REF TO LCL_ALV_RECEIVER,

    *---FO1-----*
    CLASS LCL_ALV_RECEIVER IMPLEMENTATION.

    * METHOD: HANDLE_DATA_CHANGED
      METHOD HANDLE_DATA_CHANGED.
        DATA: IT_MOD_DATA TYPE LVC_T_MODI,
              WA_MOD_DATA TYPE LVC_S_MODI.
        IT_MOD_DATA = ER_DATA_CHANGED->MT_MOD_CELLS.
        READ TABLE IT_MOD_DATA INDEX 1 INTO WA_MOD_DATA.

    *-----------例如 STAND---------------------*
    *    IF WA_MOD_DATA-FIELDNAME = 'ZWGT' AND
    *       WA_MOD_DATA-VALUE < '0'.
    *      MESSAGE ID '00' TYPE 'I' NUMBER 001
    *         WITH WA_MOD_DATA-VALUE '重量不能为负值!'.
    *      LEAVE SCREEN.
    *    ENDIF.
    *-----------例如 END-----------------------*
      ENDMETHOD.                           "HANDLE_DOUBLE_CLICK

    ENDCLASS.                             "LCL_ALV_RECEIVER IMPLEMENTATION

    *---OO1-----*
    *   添加ALV事件
        CREATE OBJECT G_EVENT_HANDLER.

    *   添加ALV句柄
        SET HANDLER G_EVENT_HANDLER->HANDLE_DATA_CHANGED FOR G_GRID1.

      CALL METHOD G_GRID1->REGISTER_EDIT_EVENT "注册更新事件
        EXPORTING
          I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.

    9、ALV里下拉列表的实现    

    *&---------------------------------------------------------------------*     
    *&   ALV里下拉列表的实现     
    *&---------------------------------------------------------------------*     
    *---TOP-----*     
      DATA:     
        IT_DROPDOWN   TYPE LVC_T_DROP,     
        WA_DROPDOWN   TYPE LVC_S_DROP,     
    *---FO1-----*     
    * ALV 的下拉列表的编辑     
      PERFORM FRM_DROPDOWN_EDIT.     
     
    *&---------------------------------------------------------------------*     
    *&      Form  FRM_DROPDOWN_EDIT     
    *&---------------------------------------------------------------------*     
    *       ALV 的下拉列表的编辑     
    *----------------------------------------------------------------------*     
    FORM FRM_DROPDOWN_EDIT.     
         
      CLEAR: WA_DROPDOWN.     
      REFRESH: IT_DROPDOWN.     
         

    *可以将写死的赋值,改成 loop 循环数据的赋值
    * 订货地区下拉列表内容编辑(例如)     
      WA_DROPDOWN-HANDLE = '1'.    "对应LVC_S_FCAT里设'1'的列 
      WA_DROPDOWN-VALUE = 'D'.    "显示的值 
      APPEND WA_DROPDOWN TO IT_DROPDOWN.     
      CLEAR:WA_DROPDOWN.     
      WA_DROPDOWN-HANDLE = '1'.     
      WA_DROPDOWN-VALUE = 'A'.     
      APPEND WA_DROPDOWN TO IT_DROPDOWN.     
      CLEAR:WA_DROPDOWN.     
      WA_DROPDOWN-HANDLE = '1'.     
      WA_DROPDOWN-VALUE = 'U'.     
      APPEND WA_DROPDOWN TO IT_DROPDOWN.     
      CLEAR:WA_DROPDOWN.     
         
    ENDFORM.                    " FRM_DROPDOWN_EDIT     
         
         
    *---OO1-----*     
      CALL METHOD G_GRID1->SET_DROP_DOWN_TABLE     "FIRST_DISPLAY调用前
        EXPORTING     
          IT_DROP_DOWN = IT_DROPDOWN.     
         
    * ALV项目表示用表的设置     
      MOVE 'C'              TO WA_CAT-JUST.     
      MOVE 'X'              TO WA_CAT-EDIT.     
      MOVE '1'              TO WA_CAT-DRDN_HNDL.     "ALV 控制: 自然数,设定下拉列表时付'1','2'......
      MOVE 'ZPO_AREA'       TO WA_CAT-FIELDNAME.     
      MOVE '订货地区'       TO WA_CAT-COLTEXT.     
      APPEND WA_CAT TO IT_CAT.     
      CLEAR WA_CAT.     

     10 OO ALV 设置保存布局

    http://wenku.baidu.com/link?url=-I04uQU4TGR13xmE1TkzVRXl6XNs8tqiQj919c6PJkh9UyzCAuMFNJI5PHRLije7WLOHpH5Z5l0WHqWU0AhOkjhZJzDKT2tVjxnL9cXMU0m

  • 相关阅读:
    java学习笔记(2)
    java学习笔记(1)
    python3自用utils(备忘录)
    关于ubuntu环境的一切
    vim中F5编译运行代码
    kafka入门教程
    python中datetime的常用功能
    Hbase实战教程(转)
    根据时间戳(毫秒)计算年龄
    如何在Debian 10上安装Python 3.8
  • 原文地址:https://www.cnblogs.com/springzt/p/4180317.html
Copyright © 2020-2023  润新知