FORM DOUBLE_CLICK_EVENT USING P_E_ROW
P_E_COLUMN.
DATA INT_MARA TYPE TABLE OF MARA with HEADER LINE.
DATA: ls_scroll type lvc_s_stbl.
data: l_valid type c.
ls_scroll-row = 'X'.
ls_scroll-col = 'X'.
read table INT_TAB index P_E_ROW.
check sy-subrc = 0.
select * from MARA
into corresponding fields of INT_MARA
where MATNR = INT_TAB-MATNR.
insert TABLE int_mara.
ENDSELECT.
IF GV_ALVGRID2 IS INITIAL.
CREATE OBJECT GV_ALVGRID2
EXPORTING
I_PARENT = GV_BOTTOM_CONTAINER.
CALL METHOD GV_ALVGRID2->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'MARA'
CHANGING
IT_OUTTAB = INT_MARA[].
ELSE.
CALL METHOD GV_ALVGRID2->REFRESH_TABLE_DISPLAY
EXPORTING
i_soft_refresh = ' '
IS_STABLE = LS_SCROLL.
ENDIF.
ENDFORM. " DOUBLE_CLICK_EVENT
사진의 위쪽 CONTAINER에 있는 필드를 더블클릭했을 때
아래쪽 CONTAINER엔 그 상세내역을 뿌려주는 프로그램입니다-
처음으로 더블클릭하면 잘 나오는데 다른값을 다시 더블클릭했을땐
프로그램 오류라면서 다음과 같은 오류가 납니다 ㅠ
SET_TABLE_FOR_FIRST_DISPLAY를 ELSE안에 다시 넣으면 제가 원하는 값이 나오긴 합니다.
하지만 전 꼭 REFRESH를 사용해보고 싶어요....
아직초보라 잘 몰르는데, 해결좀 해주세요~~
댓글 4
-
맑은하늘
2010.06.08 22:27
-
LE
2010.06.08 22:48
맑은하늘님-
말씀하신대로 하니깐 되네요^^ 넘 감사해요.
근데 왜 저런 오류가 난건지 이유도 알 수 있을까요????
제가 볼땐 위치의 이동만 있는거 같은데.. 아닌가요?^^;
-
맑은하늘
2010.06.09 00:33
처음에 container 만 만들고 grid 를 생성하지 않았기 때문에 refresh 를 하려고 해도
대상이 되는 grid 가 없기 때문에 refresh를 할 수 없어서 프로그램 오류라고 오류가
뜨는 거예요. ^^ 조금더 자세히 말씀드리면 Grid 를 만들때 container 생성(1. Create object container)
=> 생성된 container 에 grid 를 올리고 (2. Create Object ALV-Grid)
=> set_table_for_first_display 로 Grid 에 필요한 구성요소들(3. layout, field-catalog, data, and so on...)
을 채워주면 완성이 되는데, 이중에서 2, 3이 정의가 안된상태이기 때문에
Refresh 를 할 수 없었던 거예요. Refresh 는 이 세가지중에서 3. 에 해당하는 정보를 갱신하여
ALV(Advanced List viewer)를 새로고침을 해주는 것인데, 이 구성요소들이 설정이 안되어 있는 상태에서
refresh 를 하려고 했기 때문에 오류가 발생이 된 것입니다. 부족한 설명이지만 도움이 되셨으면 좋겠네요.^^
-
LE
2010.06.09 00:47
답해주셔서 너무~ 감사합니다. 이제 알거같아요^^
그럼 좋은 하루 보내세요!
splitter 로 container 쪼개는 부분에... 그러니까 첫화면 구성하는 부분에
CREATE OBJECT GV_ALVGRID2
EXPORTING
I_PARENT = GV_BOTTOM_CONTAINER.
CALL METHOD GV_ALVGRID2->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'MARA'
CHANGING
IT_OUTTAB = INT_MARA[].
을 넣어주시고 refresh 만 하시면 될 것 같다는 생각이 듭니다.