04-03-2008 6:59 AM
Hi,
I have got an alv grid (oops concept) which shows sflight table details in disable mode.Now my requirement is when i double click on carrid(airline no) it should be enabled(change mode).What i did is i created an internal table like
TYPES: BEGIN OF GTY_SFLIGHT.
TYPES: CELLTAB TYPE LVC_T_STYL.
INCLUDE STRUCTURE SFLIGHT.
TYPES: END OF GTY_SFLIGHT.
and used the event
METHODS: CATCH_DOUBLECLICK
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING
E_COLUMN
ES_ROW_NO
SENDER.
In the method i wrote it like this
METHOD CATCH_DOUBLECLICK.
DATA: LT_ROWID TYPE LVC_T_ROID,
LS_ROWID TYPE LVC_S_ROID.
CALL METHOD GRID1->GET_SELECTED_ROWS
IMPORTING
ET_ROW_NO = LT_ROWID.
read table gt_outtab into ls_outtab index es_row_no-row_id.
READ TABLE LT_ROWID INTO LS_ROWID INDEX 1.
READ TABLE GT_OUTTAB INTO WA_OUTTAB INDEX ES_ROW_NO-ROW_ID.
LOOP AT WA_OUTTAB-CELLTAB INTO LS_CELLTAB.
IF LS_CELLTAB-FIELDNAME EQ 'CARRID'.
IF LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.
MODIFY WA_OUTTAB-CELLTAB FROM LS_CELLTAB.
ENDIF.
ENDIF.
ENDLOOP.
MODIFY GT_OUTTAB FROM WA_OUTTAB INDEX ES_ROW_NO-ROW_ID.
CALL METHOD SENDER->REFRESH_TABLE_DISPLAY.
call method grid1->refresh_table_display.
ENDMETHOD. "catch_doubleclick
i wrote the same code in standard eg BCALV_EDIT_05.But the
field carrid is not coming in editable mode.
Wht can be the problem.
Thanks in advance.
Alex.
04-03-2008 10:53 AM
Hello Alex
At the end of routine CREATE_AND_INIT_ALV (BCALV_EDIT_05) there is the following coding:
...
* Set editable cells to ready for input initially
call method g_grid->set_ready_for_input
exporting
i_ready_for_input = 1.
endform. "CREATE_AND_INIT_ALV
Have you set your entire grid ready for input, too?
Regards
Uwe
04-03-2008 11:11 AM
Pls. check this program.
REPORT ZTESTALV .
*Data Declaration
*----
DATA: BEGIN OF T_EKKO,
EBELN TYPE EKPO-EBELN,
EBELP TYPE EKPO-EBELP,
END OF T_EKKO.
DATA: BEGIN OF IT_EKKO OCCURS 0.
INCLUDE STRUCTURE T_EKKO.
DATA: END OF IT_EKKO.
DATA: BEGIN OF IT_BACKUP OCCURS 0.
INCLUDE STRUCTURE T_EKKO.
DATA: END OF IT_BACKUP.
*ALV data declarations
TYPE-POOLS: SLIS. "ALV Declarations
DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
GD_LAYOUT TYPE SLIS_LAYOUT_ALV,
GD_REPID LIKE SY-REPID.
************************************************************************
*Start-of-selection.
START-OF-SELECTION.
PERFORM DATA_RETRIEVAL.
PERFORM BUILD_FIELDCATALOG.
PERFORM BUILD_LAYOUT.
IT_BACKUP] = IT_EKKO[.
PERFORM DISPLAY_ALV_REPORT.
&----
*& Form build_fieldcatalog
&----
text
-
FORM BUILD_FIELDCATALOG.
REFRESH FIELDCATALOG.
CLEAR FIELDCATALOG.
*
FIELDCATALOG-FIELDNAME = 'EBELN'.
FIELDCATALOG-SELTEXT_M = 'Purchase Order'.
FIELDCATALOG-INPUT = 'X'.
FIELDCATALOG-EDIT = 'X'.
FIELDCATALOG-COL_POS = 2.
APPEND FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'EBELP'.
FIELDCATALOG-SELTEXT_M = 'PO Item'.
FIELDCATALOG-COL_POS = 3.
APPEND FIELDCATALOG.
CLEAR FIELDCATALOG.
ENDFORM. " BUILD_FIELDCATALOG
&----
*& Form BUILD_LAYOUT
&----
Build layout for ALV grid report
-
FORM BUILD_LAYOUT.
"Permet d'ajuster les colonnes au text
gd_layout-colwidth_optimize = 'X'.
GD_LAYOUT-TOTALS_TEXT = 'Totals'(201).
gd_layout-box_fieldname = 'SELECT'.
gd_layout-box_tabname = 'IT_EKKO'.
ENDFORM. " BUILD_LAYOUT
&----
*& Form DISPLAY_ALV_REPORT
&----
Display report using ALV grid
-
FORM DISPLAY_ALV_REPORT.
GD_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = GD_REPID
i_callback_top_of_page = 'TOP-OF-PAGE'
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
i_grid_title = 'My Title'
IS_LAYOUT = GD_LAYOUT
IT_FIELDCAT = FIELDCATALOG[]
TABLES
T_OUTTAB = IT_EKKO
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC 0.
WRITE:/ SY-SUBRC.
ENDIF.
ENDFORM. " DISPLAY_ALV_REPORT
&----
*& Form DATA_RETRIEVAL
&----
Retrieve data form EKPO table and populate itab it_ekko
-
FORM DATA_RETRIEVAL.
SELECT EBELN EBELP
UP TO 10 ROWS
FROM EKPO
INTO CORRESPONDING FIELDS OF TABLE IT_EKKO.
ENDFORM. " DATA_RETRIEVAL
-
FORM SET_PF_STATUS *
-
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD_FULLSCREEN1' EXCLUDING RT_EXTAB.
ENDFORM. "set_pf_status
&----
*& Form user_command
&----
text
-
-->R_UCOMM text
-->RS_SELFIELDtext
-
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: GD_REPID LIKE SY-REPID, "Exists
REF_GRID TYPE REF TO CL_GUI_ALV_GRID. "new
*then insert the following code in your USER_COMMAND routine...
IF REF_GRID IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF_GRID.
ENDIF.
IF NOT REF_GRID IS INITIAL.
CALL METHOD REF_GRID->CHECK_CHANGED_DATA
.
ENDIF.
CASE R_UCOMM.
WHEN '&IC1'.
CHECK RS_SELFIELD-TABINDEX > 0.
IF RS_SELFIELD-VALUE EQ '6000000001'.
CALL TRANSACTION 'ZDF2'.
ENDIF.
WHEN 'REFRESH'.
READ TABLE IT_EKKO INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
READ TABLE IT_BACKUP INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
IF IT_EKKO IT_BACKUP.
then do your check
ENDIF.
ENDIF.
ENDIF.
PERFORM DATA_RETRIEVAL.
RS_SELFIELD-REFRESH = 'X'.
ENDCASE.
ENDFORM. "user_command
chk this link.
http://www.sapdevelopment.co.uk/reporting/alv/alvgrid_editable.htm
http://www.sapdevelopment.co.uk/reporting/alv/alvgrid_ucomm.htm
See these threads
http://www.sapdevelopment.co.uk/reporting/alv/alvgrid_editable.htm
Don't forget to reward if useful.......