本文演示如何在alv中现实radio button. 知道radio button的使用方法以后相信其他的图标应该都能类似处理
主程序代码如下:
TYPE-POOLS: slis, icon.
TABLES sflight.
DATA: gctn_alv TYPE REF TO cl_gui_custom_container,
gct_alv TYPE REF TO cl_gui_alv_grid,
gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat.
* Define internal table
DATA : BEGIN OF gs_sflight,
radio LIKE icon_radiobutton ,
carrid(3) TYPE c,
connid(4) TYPE n,
fldate TYPE dats,
price TYPE s_price,
END OF gs_sflight.
DATA: gt_sflight LIKE STANDARD TABLE OF gs_sflight.
DATA: g_ok_code TYPE sy-ucomm.
* Define class definition
CLASS gcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS: handle_hotspot FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_row_id.
ENDCLASS. "gcl_event_handler DEFINITION
* Define class implementation
CLASS gcl_event_handler IMPLEMENTATION.
METHOD handle_hotspot.
CLEAR : gs_sflight.
READ TABLE gt_sflight INTO gs_sflight INDEX e_row_id-index.
gs_sflight-radio = icon_wd_radio_button_empty ."icon_radiobutton.
MODIFY gt_sflight FROM gs_sflight TRANSPORTING radio WHERE radio = icon_radiobutton .
gs_sflight-radio = icon_radiobutton.
MODIFY gt_sflight FROM gs_sflight INDEX e_row_id-index.
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'REFRESH'.
ENDMETHOD. "handle_hotspot
ENDCLASS. "gcl_event_handler IMPLEMENTATION
DATA: go_handler TYPE REF TO gcl_event_handler.
SELECT-OPTIONS s_airln FOR sflight-carrid.
START-OF-SELECTION.
PERFORM sub_prepare_data.
CALL SCREEN 9100.
*&---------------------------------------------------------------------*
*& Form SUB_PREPARE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM sub_prepare_data .
SELECT carrid connid fldate price
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
FROM sflight
WHERE carrid IN s_airln.
gs_sflight-radio = icon_wd_radio_button_empty.
MODIFY gt_sflight FROM gs_sflight
TRANSPORTING radio
WHERE radio IS INITIAL.
* Build field catelog
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 1.
gs_fieldcat-fieldname = 'RADIO'.
gs_fieldcat-scrtext_m = 'radio button'.
gs_fieldcat-icon = 'X'.
gs_fieldcat-ref_table = 'GT_SFLIGHT'.
gs_fieldcat-hotspot = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 2.
gs_fieldcat-fieldname = 'CARRID'.
gs_fieldcat-scrtext_m = 'airline code'.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 3.
gs_fieldcat-fieldname = 'CONNID'.
gs_fieldcat-scrtext_m = 'connection number'.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 4.
gs_fieldcat-fieldname = 'FLDATE'.
gs_fieldcat-scrtext_m = 'flight date'.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 5.
gs_fieldcat-fieldname = 'PRICE'.
gs_fieldcat-scrtext_m = 'flight price'.
APPEND gs_fieldcat TO gt_fieldcat.
ENDFORM. " SUB_PREPARE_DATA
*&---------------------------------------------------------------------*
*& Module ALV_DISPLAY OUTPUT
*&---------------------------------------------------------------------*
* Display data in screen.
*----------------------------------------------------------------------*
MODULE alv_display OUTPUT.
IF gctn_alv IS INITIAL.
CREATE OBJECT gctn_alv
EXPORTING
container_name = 'GCTN_ALV'.
CREATE OBJECT gct_alv
EXPORTING
i_parent = gctn_alv.
CREATE OBJECT go_handler.
SET HANDLER:
go_handler->handle_hotspot FOR gct_alv.
CALL METHOD gct_alv->set_table_for_first_display
CHANGING
it_outtab = gt_sflight
it_fieldcatalog = gt_fieldcat[].
ELSE.
CALL METHOD gct_alv->refresh_table_display.
ENDIF.
ENDMODULE. " ALV_DISPLAY OUTPUT
*&---------------------------------------------------------------------*
*& Module STATUS_9100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_9100 OUTPUT.
SET PF-STATUS 'STATUS9100'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_9100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9100 INPUT.
CASE g_ok_code.
WHEN 'PBAK'.
FREE go_handler.
FREE gct_alv.
FREE gctn_alv.
LEAVE PROGRAM.
WHEN 'REFRESH'.
CALL METHOD gct_alv->refresh_table_display.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_9100 INPUT
屏幕9100的代码:
process before output.
MODULE STATUS_9100.
module alv_display.
process after input.
MODULE USER_COMMAND_9100.