안녕하세요 요즘 ALV를 구현하고 있는데 잘 안되서 이렇게 질문드립니다.
지금 CLASS를 이용하여 ALV를 만들고 있는데요
ALV화면에 툴바를 이용하여 삭제 버튼은 만들었습니다.
행을 선택한 후 (다중 선택도 포함) 삭제 버튼을 누르면 DB상에는 저장을 누르전까지는 삭제 되지 않고
화면 상에서만 삭제 되는 방법을 알고싶습니다..
댓글 6
-
e-abap
2008.03.21 01:04
-
ABAP짱!
2008.03.21 01:09
죄송한데 ALV CLASS 로직을 어떻게 짜야할지를 모르겠습니다..ㅡ.ㅜ -
옆집남자
2008.03.21 02:34
user_command 부분에서 아래와 같이 버튼을 눌렀을때의 처리문을 넣어주면 됩니다..;;;ㅎㅎㅎ
METHOD handle_user_command.
DATA: lt_rows TYPE lvc_t_row,
ls_selected_line TYPE lvc_s_row,
l_line LIKE sy-index.
ok_code = e_ucomm.
CASE ok_code.
WHEN 'EDIT'.
PERFORM select_flag.
check g_error = ''.
PERFORM grid_style using 'X'.
PERFORM refresh_grid.
WHEN 'DELETE'.
PERFORM select_flag.
check g_error = ''.
perform delete_proc.
PERFORM refresh_grid.
WHEN 'SAVE'.
PERFORM select_flag.
PERFORM save_proc.
PERFORM grid_style using ''.
PERFORM refresh_grid.
ENDCASE.
ENDMETHOD.
허접 초보 씀.ㅎ
-
바바..
2008.03.21 02:41
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS:
HANDLE_USER_COMMAND
FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM ,
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_USER_COMMAND .
PERFORM HANDLE_USER_COMMAND USING E_UCOMM .
ENDMETHOD.
-----------------------------------------------------------------------------------------
FORM CREATE_EVENT_RECEIVER .
CREATE OBJECT G_EVENT_RECEIVER.
SET HANDLER G_EVENT_RECEIVER->HANDLE_TOOLBAR FOR G_GRID.
-----------------------------------------------------------------------------------------
FORM handle_user_command USING p_e_ucomm.
DATA: lt_row_no TYPE lvc_t_roid,
ls_row_no TYPE lvc_s_roid,
lv_cnt TYPE i.
DATA : lt_rows TYPE lvc_t_row. " ALV 제어: 테이블행
DATA: ls_rows TYPE lvc_s_row.
case p_e_ucomm.
when 'INSR'. 라인추가
" ---- 1라인 추가
CLEAR gt_list.
gt_list-werks = is_werksinfo-t001w-werks.
gt_list-werks_name = IS_WERKSINFO-T001W-NAME1.
APPEND gt_list.
PERFORM SCREEN-REFRESH USING ''.
when 'DELR'. -----화면상에서 삭제
CALL METHOD g_grid->get_selected_rows
IMPORTING
et_index_rows = lt_rows.
DESCRIBE TABLE lt_rows LINES sy-tfill.
IF sy-tfill = 0. " 미선택시 마지막 행 삭제...
DESCRIBE TABLE gt_list LINES lv_cnt.
if lv_cnt > 0.
DELETE gt_list INDEX lv_cnt.
PERFORM screen-refresh USING ''.
endif.
ELSE. " 선택시 선택행만 삭제..
LOOP AT lt_rows INTO ls_rows.
lv_cnt = ls_rows-index.
DELETE gt_list INDEX lv_cnt.
ENDLOOP.
PERFORM screen-refresh USING ''.
ENDIF.
endcase.
ENDFORM. " HANDLE_USER_COMMAND
-----------------------------------------------------------------------------------------
FORM SCREEN-REFRESH USING P_MODE.
IF P_MODE = 'X'.
CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IT_TOOLBAR_EXCLUDING = GT_EXCLUDE
IS_LAYOUT = GS_LAYOUT
CHANGING
IT_FIELDCATALOG = GT_FCAT
IT_OUTTAB = GT_LIST[].
ELSE.
gs_stable-row = 'X'.
CALL METHOD g_grid->refresh_table_display
EXPORTING
is_stable = gs_stable
i_soft_refresh = 'X'.
ENDIF. -
ABAP짱!
2008.03.21 17:57
모두들 답변 감사드립니다 -
NaDa
2008.03.22 12:28
감사합니다.
인터널 테이블에서만 데이터 삭제 하면 되잖아요.. 삭제 버튼 클릭후 리프레쉬 하고
그리고 저장 버튼 클릭하면 삭제된 인터널 테이블을 DB에 저장하면 되죠~