ALV中单元格按钮的使用

上一篇 / 下一篇  2008-09-08 21:04:42 / 个人分类:SAP ABAP

一、单元格定义为按钮

 

1、 ALV内表中首先在显示数据内表中插入类型为LVC_T_STYL的内表。

即增加一个字段CELLSTYLES TYPE LVC_T_STYL

 

2、 将单元格设置为按钮:(eg:字段ZDISPLAY设置为按钮)

DATA: LV_STYLEROW TYPELVC_S_STYL.     

LOOP AT ITAB_ALVDATA INTO WA_ALVDATA.      

                                  ITAB_ALVDATAALV内表

LV_STYLEROW-FIELDNAME ='ZDISPLAY'.

LV_STYLEROW-STYLE. = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.

APPENDLV_STYLEROWTOWA_ALVDATA-CELLSTYLES.  

ENDLOOP.

 

3、 layout structure中指明显示数据内表中表示样式的字段。

GV_LAYOUT-STYLEFNAME  ='CELLSTYLES'.

 

二、按钮事件的触发调用

如果是用OO方式调用的ALV,那么很简单,只需要对对象注册事件即可,这类的资料也很多,但是对于CALL FUNCTION方式调用的ALV来说,我们可以用下列方法来处理。

 

1、 建事件CLASS

添加BUTTON_CLICK事件

CLASSLCL_EVENT_RECEIVERDEFINITION.
 PUBLICSECTION.
   METHODS:
   HANDLE_BUTTON_CLICK
     FOREVENTBUTTON_CLICKOFCL_GUI_ALV_GRID
     IMPORTINGES_COL_ID ES_ROW_NO,
ENDCLASS.

 

CLASSLCL_EVENT_RECEIVERIMPLEMENTATION.
 METHODHANDLE_BUTTON_CLICK.
   PERFORMBUTTON_CLICKUSINGES_COL_ID ES_ROW_NO.
 ENDMETHOD.
ENDCLASS.

 

DATAGV_EVENT_RECEIVERTYPEREFTOLCL_EVENT_RECEIVER.

 

2、 设置ALVEVENT事件(caller_exit)

FORMFM_EVENT_BUILD.
 DATALV_EVENTLIKELINEOFGV_EVENTS.
 CALLFUNCTION'REUSE_ALV_EVENTS_GET'
  EXPORTING
    I_LIST_TYPE          =0
  IMPORTING
    ET_EVENTS            = GV_EVENTS
  EXCEPTIONS
    LIST_TYPE_WRONG      =1
    OTHERS               =2
           .
 IFSY-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'.
 APPENDLV_EVENTTOGV_EVENTS.

ENDFORM.

 

3、 在上面caller_exit定义的FORM.:'FM_BUTTON'里通过函数GET_GLOBALS_FROM_SLVC_FULLSCR’得到ALVGRID对象,再设置这个GRIDBUTTON_CLICK事件。

 

DATAGV_GRIDTYPEREFTOCL_GUI_ALV_GRID.

 

FORMFM_BUTTONUSINGE_GRIDTYPESLIS_DATA_CALLER_EXIT.

 CALLFUNCTION'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                     =
           .

 CREATEOBJECTGV_EVENT_RECEIVER.
 SETHANDLERGV_EVENT_RECEIVER->HANDLE_BUTTON_CLICKFORGV_GRID.
ENDFORM.

4、 CLASS中定义的BUTTON_CLICK事件的FORMBUTTON_CLICK中写需要单击按钮后完成的处理。

FORMBUTTON_CLICKUSINGP_COL_ID
                       P_ROW_NOTYPElvc_s_roid.

 READTABLEITAB_ALVDATAINTOWA_ALVDATAINDEXP_ROW_NO-ROW_ID.

 PERFORMFM_DISPLAY_COMMENT.
ENDFORM.

 

5、 DISPLAY ALV

PERFORMFM_EVENT_BUILD.

* Call ALV Funcation
 CALLFUNCTION'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.

 

 

------------------------------------------Alar Cheng


TAG: ALV 单元 按钮

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2009-01-07  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 2836
  • 日志数: 70
  • 图片数: 2
  • 建立时间: 2007-10-16
  • 更新时间: 2008-11-22

RSS订阅

Open Toolbar