ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ALV中单元格按钮的使用

ALV中单元格按钮的使用

原创 Linux操作系统 作者:dudu蓝蓝 时间:2008-08-22 13:59:51 0 删除 编辑

一、单元格定义为按钮:

 

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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: POPUP ALV的使用
请登录后发表评论 登录
全部评论

注册时间:2008-04-17

  • 博文量
    16
  • 访问量
    28388