效果:

ALV demo 08:cl_salv_table (check box)_java

本来应该定义一个check box字段,懒得鼓捣了,就直接用client当check box用了,代码里自己注意一下

code:

*&---------------------------------------------------------------------*
*& Report  ZLM_ALV005
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZLM_ALV007.

CLASS LCL_REPORT DEFINITION.
*
  PUBLIC SECTION.

    DATAGT_SPFLI TYPE STANDARD TABLE OF SPFLI.
*
*   ALV reference
    DATAO_ALV TYPE REF TO CL_SALV_TABLE.
*
    METHODS:
*     data selection
      GET_DATA,
*
*     Generating output
      GENERATE_OUTPUT.
*
*
ENDCLASS.                    "lcl_report DEFINITION
*
CLASS LCL_EVENT_HANDLER DEFINITION.
*
  PUBLIC SECTION.
    METHODS:
      ON_LINK_CLICK FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE
        IMPORTING ROW COLUMN.
*
ENDCLASS.                    "lcl_event_handler DEFINITION
*
*
START-OF-SELECTION.
  DATALO_REPORT TYPE REF TO LCL_REPORT.
*
  CREATE OBJECT LO_REPORT.
*
  LO_REPORT->GET_DATA).
*
  LO_REPORT->GENERATE_OUTPUT).
*
*----------------------------------------------------------------------*
*       CLASS lcl_report IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS LCL_REPORT IMPLEMENTATION.
*
  METHOD GET_DATA.
*   data selection
    SELECT FROM SPFLI
           INTO  TABLE GT_SPFLI.
  ENDMETHOD.                    "get_data
*
*.......................................................................
  METHOD GENERATE_OUTPUT.
*
* exception class
    "display setting
    DATALR_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS.
    DATALX_MSG TYPE REF TO CX_SALV_MSG.
    TRY.
        CL_SALV_TABLE=>FACTORY(
          IMPORTING
            R_SALV_TABLE O_ALV
          CHANGING
            T_TABLE      GT_SPFLI ).
      CATCH CX_SALV_MSG INTO LX_MSG.
    ENDTRY.
*
*...Get all the Columns
    DATALO_COLS TYPE REF TO CL_SALV_COLUMNS.
    LO_COLS O_ALV->GET_COLUMNS).
*
*   set the Column optimization
    LO_COLS->SET_OPTIMIZE'X' ).
*

*...Process individual columns
    DATALO_COLUMN TYPE REF TO CL_SALV_COLUMN_LIST.
*
*   Change the properties of the Columns KUNNR
    TRY.
        LO_COLUMN ?= LO_COLS->GET_COLUMN'MANDT' ).
*        lo_column ?= lo_cols->get_column( 'CHECK' ).
        LO_COLUMN->SET_CELL_TYPEIF_SALV_C_CELL_TYPE=>CHECKBOX_HOTSPOT ).
        LO_COLUMN->SET_OUTPUT_LENGTH10 ).
      CATCH CX_SALV_NOT_FOUND.                          "#EC NO_HANDLER
    ENDTRY.
*
*   Get the event object
    DATALO_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE.
    LO_EVENTS O_ALV->GET_EVENT).
*
*   Instantiate the event handler object
    DATALO_EVENT_HANDLER TYPE REF TO LCL_EVENT_HANDLER.
    CREATE OBJECT LO_EVENT_HANDLER.
*
*   event handler
    SET HANDLER LO_EVENT_HANDLER->ON_LINK_CLICK FOR LO_EVENTS.
*

*display setting ~title
    LR_DISPLAY O_ALV->GET_DISPLAY_SETTINGS).
    LR_DISPLAY->SET_STRIPED_PATTERNCL_SALV_DISPLAY_SETTINGS=>TRUE ).
    LR_DISPLAY->SET_LIST_HEADER'Check box' ).

    "tool bar
    DATALR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS.

*tool bar
    LR_FUNCTIONS O_ALV->GET_FUNCTIONS).
    LR_FUNCTIONS->SET_ALLABAP_TRUE ).

*   Displaying the ALV
*   Here we will call the DISPLAY method to get the output on the screen
    O_ALV->DISPLAY).
*
  ENDMETHOD.                    "generate_output
*
ENDCLASS.                    "lcl_report IMPLEMENTATION
*
*----------------------------------------------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
*
  METHOD ON_LINK_CLICK.
*
*   Get the value of the checkbox and set the value accordingly
*   Refersh the table
    FIELD-SYMBOLS<LFA_DATA> LIKE LINE OF LO_REPORT->GT_SPFLI.
    READ TABLE LO_REPORT->GT_SPFLI ASSIGNING <LFA_DATA> INDEX ROW.

    CHECK SY-SUBRC IS INITIAL.

    IF <LFA_DATA>-MANDT SY-MANDT.
      <LFA_DATA>-MANDT 'X'.
    ELSE.
      CLEAR <LFA_DATA>-MANDT.
    ENDIF.
    LO_REPORT->O_ALV->REFRESH).
  ENDMETHOD.                    "on_link_click
*
ENDCLASS.                    "lcl_event_handler IMPLEMENTATION