以下是纯顾问群~

QQ群 :SAP干货铺,  群号:775662808
所有群管理严格,严格禁止一切外来链接、招聘、广告等垃圾信息!

效果:

ALV demo 08:cl_salv_table (check box)_微信

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

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

CLASS LCL_REPORT DEFINITION.
*
PUBLIC SECTION.

DATA: GT_SPFLI TYPE STANDARD TABLE OF SPFLI.
*
* ALV reference
DATA: O_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.
DATA: LO_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
DATA: LR_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS.
DATA: LX_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
DATA: LO_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
DATA: LO_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_TYPE( IF_SALV_C_CELL_TYPE=>CHECKBOX_HOTSPOT ).
LO_COLUMN->SET_OUTPUT_LENGTH( 10 ).
CATCH CX_SALV_NOT_FOUND. "#EC NO_HANDLER
ENDTRY.
*
* Get the event object
DATA: LO_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE.
LO_EVENTS = O_ALV->GET_EVENT( ).
*
* Instantiate the event handler object
DATA: LO_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_PATTERN( CL_SALV_DISPLAY_SETTINGS=>TRUE ).
LR_DISPLAY->SET_LIST_HEADER( 'Check box' ).

"tool bar
DATA: LR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS.

*tool bar
LR_FUNCTIONS = O_ALV->GET_FUNCTIONS( ).
LR_FUNCTIONS->SET_ALL( ABAP_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