首页 > Linux操作系统 > Linux操作系统 > ALV中单元格按钮的使用
一、单元格定义为按钮:
1、 ALV内表中首先在显示数据内表中插入类型为LVC_T_STYL的内表。
即增加一个字段CELLSTYLES TYPE LVC_T_STYL。
2、 将单元格设置为按钮:(eg:字段ZDISPLAY设置为按钮)
DATA: LV_STYLEROW TYPE LVC_S_STYL.
LOOP AT ITAB_ALVDATA INTO WA_ALVDATA.
“ITAB_ALVDATA为ALV内表
LV_STYLEROW-FIELDNAME = 'ZDISPLAY'.
LV_STYLEROW-STYLE. = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
APPEND LV_STYLEROW TO WA_ALVDATA-CELLSTYLES.
ENDLOOP.
3、 在layout structure中指明显示数据内表中表示样式的字段。
GV_LAYOUT-STYLEFNAME = 'CELLSTYLES'.
二、按钮事件的触发调用
如果是用OO方式调用的ALV,那么很简单,只需要对对象注册事件即可,这类的资料也很多,但是对于CALL FUNCTION方式调用的ALV来说,我们可以用下列方法来处理。
1、 建事件CLASS
添加BUTTON_CLICK事件
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS:
HANDLE_BUTTON_CLICK
FOR EVENT BUTTON_CLICK OF CL_GUI_ALV_GRID
IMPORTING ES_COL_ID ES_ROW_NO,
ENDCLASS.
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_BUTTON_CLICK.
PERFORM BUTTON_CLICK USING ES_COL_ID ES_ROW_NO.
ENDMETHOD.
ENDCLASS.
DATA GV_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.
2、 设置ALV的EVENT事件(caller_exit)
FORM FM_EVENT_BUILD.
DATA LV_EVENT LIKE LINE OF GV_EVENTS.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = GV_EVENTS
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LV_EVENT-NAME = 'CALLER_EXIT'.
LV_EVENT-FORM = 'FM_BUTTON'.
APPEND LV_EVENT TO GV_EVENTS.
ENDFORM.
3、 在上面caller_exit定义的FORM.: 'FM_BUTTON'里通过函数‘GET_GLOBALS_FROM_SLVC_FULLSCR’得到ALV的GRID对象,再设置这个GRID的BUTTON_CLICK事件。
DATA GV_GRID TYPE REF TO CL_GUI_ALV_GRID.
FORM FM_BUTTON USING E_GRID TYPE SLIS_DATA_CALLER_EXIT.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
* EXPORTING
* IR_SALV_FULLSCREEN_ADAPTER =
IMPORTING
* ET_EXCLUDING =
* E_REPID =
* E_CALLBACK_PROGRAM =
* E_CALLBACK_ROUTINE =
E_GRID = GV_GRID
* ET_FIELDCAT_LVC =
* ER_TRACE =
* E_FLG_NO_HTML =
* ES_LAYOUT_KKBLO =
* ES_SEL_HIDE =
* ET_EVENT_EXIT =
* ER_FORM_TOL =
* ER_FORM_EOL =
.
CREATE OBJECT GV_EVENT_RECEIVER.
SET HANDLER GV_EVENT_RECEIVER->HANDLE_BUTTON_CLICK FOR GV_GRID.
ENDFORM.
4、 在CLASS中定义的BUTTON_CLICK事件的FORM: BUTTON_CLICK中写需要单击按钮后完成的处理。
FORM BUTTON_CLICK USING P_COL_ID
P_ROW_NO TYPE lvc_s_roid.
READ TABLE ITAB_ALVDATA INTO WA_ALVDATA INDEX P_ROW_NO-ROW_ID.
PERFORM FM_DISPLAY_COMMENT.
ENDFORM.
5、 DISPLAY ALV
PERFORM FM_EVENT_BUILD.
* Call ALV Funcation
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_GRID_TITLE = GV_TITLE
I_DEFAULT = 'X'
I_SAVE = 'A'
IT_EVENTS = GV_EVENTS
IT_FIELDCAT_LVC = GV_FIELDCAT_ALV[]
IS_LAYOUT_LVC = GV_LAYOUT
I_CALLBACK_PF_STATUS_SET = GV_STATUS
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
TABLES
T_OUTTAB = ITAB_ALVDATA
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11671405/viewspace-432979/ ,如需转载,请注明出处,否则将追究法律责任。