Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

RE:ALV grid (oops concept)

alex_georgek
Explorer
0 Kudos

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.

2 REPLIES 2

uwe_schieferstein
Active Contributor
0 Kudos

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

Former Member
0 Kudos

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.......