下面介绍调用REUSE_ALV_GRID_DISPLAY_LVC创建ALV时,如何显示单选按钮(radio button),以及对应的单选按钮选择相应。
简单逻辑:
1,radio button的ICON: '@TB@' (选中)和 '@SR@' (未选中)
2,注册 事件lcl_event_receiver=>hotspot_click对应的method,用来处理单击radio button时的图标变更。
完整例子代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
REPORT ztest_alv_radiobutton. TYPE-POOLS:abap, slis. DATA: BEGIN OF gt_list OCCURS 0, sel TYPE char4, val TYPE i, END OF gt_list. DATA: go_alv_grid TYPE REF TO cl_gui_alv_grid. *&---------------------------------------------------------------------* *& CLASS LCL_EVENT_RECEIVER DEFINITION *&---------------------------------------------------------------------* CLASS lcl_event_receiver DEFINITION. PUBLIC SECTION. CLASS-METHODS: * hotspot事件 hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_row_id e_column_id es_row_no. ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION *&---------------------------------------------------------------------* *& CLASS LCL_EVENT_RECEIVER DEFINITION *&---------------------------------------------------------------------* CLASS lcl_event_receiver IMPLEMENTATION. METHOD hotspot_click. DATA: ls_list LIKE gt_list. CLEAR ls_list. READ TABLE gt_list INTO ls_list INDEX e_row_id. IF gt_list-sel NE '@TB@'. ls_list-sel = '@SR@'."radio button选中的图标 MODIFY gt_list FROM ls_list TRANSPORTING sel WHERE sel NE '@SR@'. ls_list-sel = '@TB@'."没有选中radio button的图标 MODIFY gt_list FROM ls_list INDEX e_row_id TRANSPORTING sel . ENDIF. PERFORM frm_ref_alv. ENDMETHOD. "HANDLE_ONF4 ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. PERFORM frm_get_data. PERFORM frm_dsp_data. *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* FORM frm_get_data . DO 10 TIMES. IF sy-index = 1. gt_list-sel = '@TB@'. ELSE. gt_list-sel = '@SR@'. ENDIF. gt_list-val = sy-index. APPEND gt_list. ENDDO. ENDFORM. " FRM_GET_DATA *&---------------------------------------------------------------------* *& Form FRM_DSP_DATA *&---------------------------------------------------------------------* FORM frm_dsp_data . DATA: ls_layo TYPE lvc_s_layo, lt_fcat TYPE lvc_t_fcat, ls_fcat TYPE lvc_s_fcat, lt_event TYPE slis_t_event, ls_event TYPE slis_alv_event. ls_layo-zebra = abap_true. ls_layo-cwidth_opt = abap_true. ls_fcat-fieldname = 'SEL'. ls_fcat-hotspot = 'X'. ls_fcat-scrtext_l = ls_fcat-scrtext_m = ls_fcat-scrtext_s = '选择'. APPEND ls_fcat TO lt_fcat. CLEAR ls_fcat. ls_fcat-fieldname = 'VAL'. ls_fcat-scrtext_l = ls_fcat-scrtext_m = ls_fcat-scrtext_s = '值'. APPEND ls_fcat TO lt_fcat. CLEAR ls_fcat. ls_event-name = slis_ev_caller_exit_at_start. ls_event-form = slis_ev_caller_exit_at_start. APPEND ls_event TO lt_event. * 显示alv列表 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid is_layout_lvc = ls_layo it_fieldcat_lvc = lt_fcat i_save = 'A' it_events = lt_event TABLES t_outtab = gt_list EXCEPTIONS program_error = 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. ENDFORM. " FRM_DSP_DATA *&---------------------------------------------------------------------* *& Form CALLER_EXIT *&---------------------------------------------------------------------* FORM caller_exit USING u_exit TYPE slis_data_caller_exit. DATA: ls_f4 TYPE lvc_s_f4, lt_f4 TYPE lvc_t_f4. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = go_alv_grid. * 设置回车事件 CALL METHOD go_alv_grid->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter EXCEPTIONS error = 1 OTHERS = 2. * 设置光标焦点移开被修改单元格后触发事件 CALL METHOD go_alv_grid->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified EXCEPTIONS error = 1 OTHERS = 2. SET HANDLER lcl_event_receiver=>hotspot_click FOR go_alv_grid. ENDFORM. "CALLER_EXIT *&---------------------------------------------------------------------* *& Form FRM_REF_ALV *&---------------------------------------------------------------------* FORM frm_ref_alv . DATA ls_stbl TYPE lvc_s_stbl. ls_stbl-row = abap_true. ls_stbl-col = abap_true. CALL METHOD go_alv_grid->refresh_table_display EXPORTING is_stable = ls_stbl. ENDFORM. " FRM_REF_ALV |
运行结果:
以上。
发表评论