如何在alv中插入radio button

 本文演示如何在alv中现实radio button. 知道radio button的使用方法以后相信其他的图标应该都能类似处理

 

主程序代码如下:

 

TYPE-POOLSslisicon.

TABLES sflight.

DATAgctn_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(3TYPE c,
       connid(4TYPE n,
       fldate TYPE dats,
       price TYPE s_price,
       END OF gs_sflight.

DATAgt_sflight LIKE STANDARD TABLE OF gs_sflight.

DATAg_ok_code TYPE sy-ucomm.
*   Define class definition
CLASS gcl_event_handler DEFINITION.

  PUBLIC SECTION.
    METHODShandle_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

DATAgo_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.

 

你可能感兴趣的:(command,table,input,button,RadioButton,output)