OOALV常用的方法在类 CL_GUI_ALV_GRID 中,在这里主要举例我最常用的几种方法。
1.DATA_CHANGED,单元格已经改变了,获取哪个单元格改变了。
2.TOOLBAR ,在工具栏增加按钮。
3.USER_COMMAND,按钮事件,点了什么按钮,触发什么功能。
4.DOUBLE_CLICK,双击事件。
贴上代码演示如何使用
首先ALV调用如下
CREATE OBJECT GS_PARENT
EXPORTING
CONTAINER_NAME = 'ALV'. " 界面中的一个CUNSTOMER CONTROL控件 用于存放类对象。
"使用这个控件把名称赋值给CONTAINER_NAME
******将alv植入到容器中
CREATE OBJECT ALV_GRID
EXPORTING
I_PARENT = GS_PARENT.
PERFORM PREPARE_FIELD_CATALOG CHANGING GT_FIELDCAT.
PERFORM PREPARE_LAYOUT CHANGING GS_LAYOUT.
PERFORM TOOLBAR_EXCLUDING_ITEM CHANGING IT_TOOLBAR_EXCLUDING. "ALV按钮排除
CALL METHOD ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT
I_SAVE = 'A'
I_DEFAULT = 'X'
IS_VARIANT = GS_VARIANT
IT_TOOLBAR_EXCLUDING = IT_TOOLBAR_EXCLUDING
CHANGING
IT_OUTTAB = GT_ITEM
IT_FIELDCATALOG = GT_FIELDCAT.
CREATE OBJECT EVENT_RECEIVER. "创建事件
SET HANDLER EVENT_RECEIVER->HANDLE_DOUBLE_CLICK FOR ALV_GRID. "双击事件
SET HANDLER EVENT_RECEIVER->HANDLE_ONF4 FOR ALV_GRID. "F4帮助事件
SET HANDLER EVENT_RECEIVER->HANDLE_TOOLBAR FOR ALV_GRID. "ALV状态栏
SET HANDLER EVENT_RECEIVER->HANDLE_USER_COMMAND FOR ALV_GRID. "按钮事件
SET HANDLER EVENT_RECEIVER->HANDLE_DATA_CHANGED FOR ALV_GRID. "修改事件
* gt_t_f4 = VALUE #( BASE gt_t_f4 ( fieldname = 'ZBB' register = 'X' getbefore = 'X' chngeafter = 'X' ) ) .
* CALL METHOD alv_grid->register_f4_for_fields
* EXPORTING
* it_f4 = gt_t_f4.
CALL METHOD ALV_GRID->REGISTER_EDIT_EVENT "注册编辑事件,否则不会触发更新事件
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
EXPORTING
CONTROL = ALV_GRID.
CALL METHOD CL_GUI_CFW=>FLUSH.
OO使用的参数如下
DATA: OK_CODE LIKE SY-UCOMM.
CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.
DATA: EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.
DATA: GT_FIELDCAT TYPE LVC_T_FCAT,
GS_LAYOUT TYPE LVC_S_LAYO,
GS_VARIANT TYPE DISVARIANT,
GT_T_F4 TYPE LVC_T_F4,
IT_TOOLBAR_EXCLUDING TYPE UI_FUNCTIONS.
DATA: STBL TYPE LVC_S_STBL. "鼠标游标位置
DATA: ET_FILTERED TYPE LVC_T_FIDX.
DATA: GV_CODE TYPE SY-TCODE .
DATA ALV_GRID TYPE REF TO CL_GUI_ALV_GRID. "后面要用到CL_GUI_ALV_GRID类中的方法
"SET_TABLE_FIRST_DISPLAY,这个方法基于实例存在,必须
"为这个类创建一个对象。在此处声明。
DATA GS_PARENT TYPE REF TO CL_GUI_CUSTOM_CONTAINER . "定义容器
DATA GT_SELECT TYPE LVC_T_CELL . "定義選中單元格方法參數
DATA GT_SELROW TYPE LVC_T_ROW . "定義選中行方法參數
类定义如下
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID "定义类中的方法---双击
IMPORTING E_ROW E_COLUMN ES_ROW_NO. "
" "
METHODS HANDLE_ONF4 FOR EVENT ONF4 OF CL_GUI_ALV_GRID "定义类中的方法---F4帮助
IMPORTING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA . "
"
METHODS HANDLE_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID "定义类中的方法---ALV状态栏按钮
IMPORTING E_OBJECT E_INTERACTIVE . "
"
METHODS HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID "定义类中的方法---按钮触发方法
IMPORTING E_UCOMM . "
"
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 E_UCOMM. "
ENDCLASS. "LCL_EVENT_RECEIVER
类实现如下
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_DOUBLE_CLICK.
ENDMETHOD. "HANDLE_DOUBLE_CLICK双击后触发该段代码,可接T-CODE跳转等功能
METHOD HANDLE_ONF4.
ENDMETHOD. "需在ALV中调用触发一般与filedcat中的 f4availabl 参数同用
METHOD HANDLE_TOOLBAR. "在ALV状态栏增加按钮,一般是汇总按钮,新增后的按钮可触发HANDLE_USER_COMMAND方法
* DATA: LS_TOOLBAR TYPE STB_BUTTON.
* CLEAR LS_TOOLBAR.
* MOVE 3 TO LS_TOOLBAR-BUTN_TYPE. "分隔符
* APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
*
* CLEAR LS_TOOLBAR.
* MOVE 'ADD' TO LS_TOOLBAR-FUNCTION. "功能码
* MOVE ICON_INSERT_ROW TO LS_TOOLBAR-ICON. "图标
* MOVE '插入行' TO LS_TOOLBAR-QUICKINFO.
* MOVE '插入行' TO LS_TOOLBAR-TEXT. "显示名称
* MOVE ' ' TO LS_TOOLBAR-DISABLED.
* APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
*
* CLEAR LS_TOOLBAR.
* MOVE 'DEL' TO LS_TOOLBAR-FUNCTION. "功能码
* MOVE ICON_DELETE_ROW TO LS_TOOLBAR-ICON. "图标
* MOVE '刪除行' TO LS_TOOLBAR-QUICKINFO.
* MOVE '刪除行' TO LS_TOOLBAR-TEXT. "显示名称
* MOVE ' ' TO LS_TOOLBAR-DISABLED.
* APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
ENDMETHOD. "在ALV状态栏增加按钮,一般是汇总按钮
METHOD HANDLE_USER_COMMAND.
* CASE E_UCOMM.
* WHEN 'ADD'.
* APPEND INITIAL LINE TO GT_ITEM .
* WHEN 'DEL'.
* CALL METHOD ALV_GRID->GET_SELECTED_ROWS
* IMPORTING
* ET_INDEX_ROWS = GT_SELROW.
* LOOP AT GT_SELROW INTO DATA(GS_SELROW).
* DELETE GT_ITEM[] INDEX GS_SELROW-INDEX .
* ENDLOOP .
* WHEN OTHERS.
* ENDCASE.
* CALL METHOD ALV_GRID->REFRESH_TABLE_DISPLAY
* EXPORTING
* IS_STABLE = STBL.
ENDMETHOD. "一般与HANDLE_TOOLBAR同用
METHOD HANDLE_DATA_CHANGED.
ENDMETHOD. "数据修改后触发,一般用在数据联动修改如数量字段修改,同时联动修改金额字段
DATA_CHANGED方法如何获取到修改的值
DATA: lv_ref TYPE c.
CALL METHOD alv_grid->get_selected_cells
IMPORTING
et_cell = gt_select.
LOOP AT GT_SELECT INTO DATA(GS_TEM).
READ TABLE GT_ITEM INDEX GS_TEM-ROW_ID ASSIGNING FIELD-SYMBOL(<FS_TMP>) .
IF <FS_TMP>-zjbj <> 'X' .
<FS_TMP>-XGBJ = 'X' .
ENDIF.
ENDLOOP.
CLEAR lv_ref.
LOOP AT er_data_changed->mt_good_cells ASSIGNING FIELD-SYMBOL(<ls_good>).
IF <ls_good>-FIELDNAME = 'MATNR'.
以上,欢迎交流
本文详述了ABAP中OOALV的实操应用,重点介绍了CL_GUI_ALV_GRID类的使用方法,包括单元格改变事件、工具栏按钮添加、用户命令响应及双击事件处理等关键操作。
2921

被折叠的 条评论
为什么被折叠?



