C_CHECK | A | B | C | D | ICON(신호등) |
1 | 2 | 3 | 4 | ||
1 | 2 | 3 | 4 | ||
1 | 2 | 3 | 4 | ||
1 | 2 | 3 | 4 | ||
1 | 2 | 3 | 4 | ||
1 | 2 | 3 | 4 | ||
1 | 2 | 3 | 4 |
제가 이런식으로 EXCEL파일을 ALV로 보여주는 프로그램을 짰는데 여기서 더 추가해서 상단에 전체선택, 전체해제, 저장 버튼을 생성하고
EXCEL파일을 불러왔을때 옆에 CEECKBOX를 에 임의의 줄을 체크했다고 가정하고 저장버튼을 누르면 (체크된것만 저장이된다고 가정) 저장된 줄은 파란색 신호등이 들어오고 나머지 줄들은 변화없이 놀나불로 계속 남아있게 하는 프로그램을 짤려고 하는데 고수님들이 보기에는 정말 간단한 것일 수도 있지만 전 완전 초보라 몇일째 애를 먹고있어서ㅠㅜ
많은 조언 부탁드립니다.
댓글 7
-
특정단어
2010.08.10 00:52
-
그저조아
2010.08.10 01:53
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE RF_UCOMM.
*save_ok = ok_code.
* 'BACK', 'CANC'버튼 클릭 시 한단계 전, 'EXIT' 시에는 프로그램을 떠난다.
WHEN 'BACK'(001) OR 'CANC'(002).
LEAVE TO SCREEN 0.
WHEN 'SAVE'.
ITAB-ICON = ICON_LED_GREEN.
MODIFY ITAB.
WHEN 'EXIT'(003).
LEAVE PROGRAM.
ENDCASE.
ENDFORM. "USER_COMMAND
제가 이런식으로 코딩을 했는데 문제가 있는듯 보여서...ㅠ
-
특정단어
2010.08.10 02:01
음...
WHEN 'SAVE'.
ITAB-ICON = ICON_LED_GREEN.
MODIFY ITAB.
이라...
음.. 죄송합니다.
뭐라 드릴 말씀이 없네요.
며칠 더 고생하셔야겠어요. ㅡ,.ㅡ
* 절대 님을 무시하고자 하는 의도는 아닙니다. 다만, 현 상황에서 님을 도울 수 있을 만한 뽀족한 수가 없네요. 대신 코딩을 해 드린다면 모를 까...
-
aDam
2010.08.10 02:30
지금은 인터널 테이블만 쓰셨네요... 음.... CBO테이블을 하나 만들어서 하면 어떨까요?
CBO테이블은 다만 저장이 되였는지 않되였는지를 체크하는 용도로 쓰면 아이콘을 될것 같아요. 만약 조회가 1회용으로만 이루어 진것이라면 프로그램 나가실때 CBO테이블에 값은 지우고 나가면 될것 같아요.
-
그저조아
2010.08.10 20:23
FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE RF_UCOMM.
* 'BACK', 'CANC'버튼 클릭 시 한단계 전, 'EXIT' 시에는 프로그램을 떠난다.
WHEN 'BACK'(001) OR 'CANC'(002).
LEAVE TO SCREEN 0.
WHEN 'SELECT_ALL'.
LOOP AT ITAB
WHERE C_CHECK = 'X'.
ENDLOOP.
WHEN 'DESELECT_A'.
LOOP AT ITAB
WHERE C_CHECK = ''.
ENDLOOP.
WHEN 'SAVE'.
IF ICON_CHECK = 'X'.
ITAB-ICON = ICON_LED_GREEN.
ELSE.
ITAB-ICON = ICON_LED_YELLOW.
ENDIF.
MODIFY ITAB.
WHEN 'EXIT'(003).
LEAVE PROGRAM.
ENDCASE.
ENDFORM.
흠~ 조금 수정해봤는데 활성화는 되는데
실행시켜서 저장버튼을 누루면 덤프가 나고 전체선택, 전체해제 버튼을 눌러도 변화가 없네요 ;;;
몇일 더 공부해야 되나요 ;;;; ㅎ
-
aDam
2010.08.11 00:29
ㅎㅎ 덤프가 나는건 modify itab에서 itab의 index를 지정해주지 않아서 그렇구요
전체선택 전체해제 버튼을 눌러도 변화가 없는건 itab에 값을 주지도 않고 modify도 하지 않아서 그래요
시간이 조금 더 걸리더라도 하나하나 알아가면서 즐밥 하길 바랄께요
-
그저조아
2010.08.12 02:32
감사합니다. 이래저래 해서 해결되었습니다. ㅎ
ALV는 table control과 달리 전체선택/해제 버튼이 따로 필요없습니다. ALV에서 이미 제공하고 있기 떄문입니다.
* 그리드 선택열 정보: grid_object->get_selected_rows 이용
i.e)
data: ls_rows type LVC_S_ROW,
lt_rows type LVC_T_ROW.
grid->get_selected_rows
IMPORTING
et_index_rows = lt_rows[] ).
DELETE lt_rows WHERE rowtype IS NOT INITIAL. "aggregation라인 삭제
loop at lt_rows into ls_rows.
read table itab index ls_rows-index.
<< add your code here... >>
endloop.
** 님의 경우에, 궂이 checkbox를 넣을 예정이시라면 그리드의 선택열에 대해 checkbox를 체크해주도록 프로그램 한 다음,
loop at itab where c_check eq 'X'.
...
endloop.
로 로직을 구성해도 되겠네요.