
전체선택 / 전체해제 버튼 넣기
1) REUSE_ALV_GRID_DISPLAY 이용
is_layout 내 box_fieldname을 지정시, 해당 버튼이 자동으로 생성.
DATA : BEGIN OF itab OCCURS 0,
mark(1),
bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
bstat TYPE bkpf-bstat,
bstat_t(4) TYPE c,
budat TYPE bkpf-budat,
buzei TYPE bseg-buzei,
hkont TYPE bseg-hkont,
shkzg TYPE bseg-shkzg,
sgtxt TYPE bseg-sgtxt,
txt20 TYPE skat-txt20,
dmbtr TYPE bseg-dmbtr,
dmbtr_m TYPE bseg-dmbtr,
kostl TYPE bseg-kostl,
ktext TYPE cskt-ktext,
saknr TYPE bseg-saknr,
END OF itab.
gs_layo_f-box_fieldname = 'MARK'.
결과화면

2) CL_GUI_ALV_GRID 이용
is_layout 내 box_fname 이 있으나, 해당 필드의 값을 추가하여도 버튼이 생성되지는 않음
확인해보니 box_fname이 cl_gui_alv_grid=>set_table_for_first_display 메소드에서 사용하는 부분은 없음
다만 클릭한 행을 읽어오는
clgui_alv_grid=>get_selected* 계열의 메소드에는 box_fname으로 사용 가능.
강제로 버튼을 만들어서 alv grid 내 순서에 맞게 들어가는 작업을 함
2-1) Class 정의
CLASS lcl_grid DEFINITION.
PUBLIC SECTION.
METHODS :
toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object E_INTERACTIVE,
command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.
CLASS lcl_grid IMPLEMENTATION.
METHOD toolbar.
PERFORM toolbar USING e_object E_INTERACTIVE.
ENDMETHOD.
METHOD command.
PERFORM command USING e_ucomm.
ENDMETHOD.
ENDCLASS.
*************************************************
CREATE OBJECT gcl_grid.
SET HANDLER gcl_grid->hotspot FOR go_grid.
SET HANDLER gcl_grid->toolbar FOR go_grid.
SET HANDLER gcl_grid->command FOR go_grid.
2-2) 메소드 기능 넣기
FORM toolbar USING p_object TYPE REF TO cl_alv_event_toolbar_set
p_interactive TYPE char01.
DATA : ls_toolbar TYPE stb_button,
lv_tabix type sy-tabix.
LOOP AT p_object->mt_toolbar INTO ls_toolbar.
CASE ls_toolbar-function.
WHEN '&SELALL'.
ENDCASE.
ENDLOOP.
CLEAR ls_toolbar.
ls_toolbar-function = c_sel.
ls_toolbar-icon = icon_select_all.
ls_toolbar-quickinfo = TEXT-031.
* ls_toolbar-text = TEXT-031.
ls_toolbar-butn_type = 0.
READ TABLE p_object->mt_toolbar WITH KEY function = '&&SEP03' "구분자 |
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
lv_tabix = sy-tabix.
INSERT ls_toolbar INTO p_object->mt_toolbar
INDEX lv_tabix.
ELSE.
APPEND ls_toolbar TO p_object->mt_toolbar.
ENDIF.
CLEAR ls_toolbar.
ls_toolbar-function = c_desel.
ls_toolbar-icon = icon_deselect_all.
ls_toolbar-quickinfo = TEXT-032.
* ls_toolbar-text = TEXT-032.
ls_toolbar-butn_type = 0.
READ TABLE p_object->mt_toolbar WITH KEY function = '&&SEP03' "구분자 |
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
lv_tabix = sy-tabix.
INSERT ls_toolbar INTO p_object->mt_toolbar
INDEX lv_tabix.
ELSE.
APPEND ls_toolbar TO p_object->mt_toolbar.
ENDIF.
ENDFORM.
FORM command USING p_ucomm TYPE sy-ucomm.
DATA : lt_index_rows TYPE lvc_t_row,
ls_index_rows TYPE lvc_s_row,
lt_row_no TYPE lvc_t_roid,
ls_row_no TYPE lvc_s_roid,
i TYPE i.
CLEAR : lt_index_rows, lt_row_no,
ls_index_rows, ls_row_no.
i = 1.
IF p_ucomm = c_sel.
LOOP AT itab.
ls_index_rows-index = i.
ls_row_no-row_id = i.
ls_row_no-sub_row_id = 0.
APPEND : ls_index_rows TO lt_index_rows,
ls_row_no TO lt_row_no.
i = i + 1.
CLEAR itab.
ENDLOOP.
CALL METHOD go_grid->set_selected_rows
EXPORTING
it_index_rows = lt_index_rows
it_row_no = lt_row_no.
* is_keep_other_selections =
ELSEIF p_ucomm = c_desel.
LOOP AT itab.
CLEAR itab.
ENDLOOP.
CALL METHOD go_grid->set_selected_rows
EXPORTING
it_index_rows = lt_index_rows
it_row_no = lt_row_no.
* is_keep_other_selections =
ENDIF.
ENDFORM.
2-3) 핸들러 설정
CREATE OBJECT gcl_grid.
SET HANDLER gcl_grid->toolbar FOR go_grid.
SET HANDLER gcl_grid->command FOR go_grid.
결과화면
