当勾选任意一行数据时,同CARRID字段都打钩。当再点击来取消勾选时,相同CARRID数据同时取消勾选。
效果图:
![ALVcheckbox相关数据同时勾选或者同时取消 ALVcheckbox相关数据同时勾选或者同时取消](https://i-blog.csdnimg.cn/blog_migrate/a3ee00d16b3d912941533fca6ba97d2d.jpeg)
除了常用的全选,取消全选。这个功能有时候会用到。
直接上干货。
主要逻辑都可以直接复用,把画红框的结构换成自己的就行了。
ALV需要显示的,都可以copy过去稍微改改即可。
![ALVcheckbox相关数据同时勾选或者同时取消 ALVcheckbox相关数据同时勾选或者同时取消](https://i-blog.csdnimg.cn/blog_migrate/14d527d945cc5f5926ac77b5f3ede9b3.jpeg)
DEMO:
![ALVcheckbox相关数据同时勾选或者同时取消 ALVcheckbox相关数据同时勾选或者同时取消](https://i-blog.csdnimg.cn/blog_migrate/3dc78e1d2c023afb86505b2a43ef11ae.jpeg)
*&---------------------------------------------------------------------*
*& Report ZLM_ALV_CHECKBOX
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZLM_ALV_CHECKBOX .
DATA : LS_LAYOUT TYPE SLIS_LAYOUT_ALV .
DATA : CT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV .
DATA : GT_FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV .
DATA : LS_CT_FIELDCAT LIKE LINE OF CT_FIELDCAT .
DATA : LS_IT_FIELDCATALOG LIKE LINE OF GT_FIELDCATALOG .
DATA : LV_GRID_TITLE TYPE LVC_TITLE .
DATA : LV_ALV_STRUCTURE TYPE DD02L - TABNAME VALUE 'ZLM_SPFLI' .
DATA : GT_ALV TYPE TABLE OF ZLM_SPFLI .
DATA : GS_ALV TYPE ZLM_SPFLI .
FIELD-SYMBOLS LIKE LINE OF GT_ALV .
START-OF-SELECTION .
"get data
PERFORM FRM_GET_DATA .
"alv show
PERFORM FRM_ALV_SHOW .
*&---------------------------------------------------------------------*
*& Form ZFORM_SET_PF_STATUS_FC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RT_EXTAB text
*----------------------------------------------------------------------*
FORM ZFORM_SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB .
SET PF-STATUS 'STATUS' .
ENDFORM . "zform_set_PF_STATUS
*&---------------------------------------------------------------------*
*& Form alv_user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM ALV_USER_COMMAND USING R_UCOMM LIKE SY - UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD .
DATA : L_GRID TYPE REF TO CL_GUI_ALV_GRID .
DATA : LV_VALUE TYPE CHAR20 .
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = L_GRID .
CALL METHOD L_GRID -> CHECK_CHANGED_DATA .
CALL METHOD L_GRID -> REFRESH_TABLE_DISPLAY .
RS_SELFIELD - REFRESH = 'X' .
RS_SELFIELD - COL_STABLE = 'X' .
RS_SELFIELD - ROW_STABLE = 'X' .
CASE R_UCOMM .
WHEN '&IC1' . "热键
CASE RS_SELFIELD - FIELDNAME .
WHEN 'CHECKBOX' .
PERFORM FRM_CHECK_BOX USING RS_SELFIELD .
WHEN OTHERS .
ENDCASE .
WHEN 'BACK' .
LEAVE TO SCREEN 0 .
WHEN 'LEAVE' .
LEAVE PROGRAM .
ENDCASE .
CALL METHOD L_GRID -> CHECK_CHANGED_DATA .
CALL METHOD L_GRID -> REFRESH_TABLE_DISPLAY .
ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_BOX
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CHECK_BOX USING RS_SELFIELD TYPE SLIS_SELFIELD . .
READ TABLE GT_ALV INTO GS_ALV INDEX RS_SELFIELD - TABINDEX .
CHECK SY - SUBRC = 0 .
LOOP AT GT_ALV ASSIGNING
WHERE
CARRID = GS_ALV - CARRID .
IF - CHECKBOX = 'X' .
CLEAR - CHECKBOX .
ELSE .
- CHECKBOX = 'X' .
ENDIF .
ENDLOOP .
ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
"get data
SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF TABLE GT_ALV .
ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_ALV_SHOW
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ALV_SHOW .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = LV_ALV_STRUCTURE
CHANGING
CT_FIELDCAT = CT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3 .
CLEAR GT_FIELDCATALOG[] .
LOOP AT CT_FIELDCAT INTO LS_CT_FIELDCAT .
MOVE-CORRESPONDING LS_CT_FIELDCAT TO LS_IT_FIELDCATALOG .
LS_IT_FIELDCATALOG - SELTEXT_L = LS_CT_FIELDCAT - SELTEXT_L .
LS_IT_FIELDCATALOG - SELTEXT_M = LS_CT_FIELDCAT - SELTEXT_M .
LS_IT_FIELDCATALOG - SELTEXT_S = LS_CT_FIELDCAT - SELTEXT_S .
CASE LS_IT_FIELDCATALOG - FIELDNAME .
"如果有复选框
WHEN 'CHECKBOX' .
LS_IT_FIELDCATALOG - OUTPUTLEN = 8 .
LS_IT_FIELDCATALOG - DDICTXT = '选择' .
LS_IT_FIELDCATALOG - SELTEXT_L = '选择' .
LS_IT_FIELDCATALOG - SELTEXT_M = '选择' .
LS_IT_FIELDCATALOG - SELTEXT_S = '选择' .
LS_IT_FIELDCATALOG - REPTEXT_DDIC = '选择' .
LS_IT_FIELDCATALOG - CHECKBOX = 'X' .
LS_IT_FIELDCATALOG - EDIT = 'X' .
LS_IT_FIELDCATALOG - HOTSPOT = 'X' .
WHEN OTHERS .
ENDCASE .
LS_IT_FIELDCATALOG - DDICTXT = 'L' .
APPEND LS_IT_FIELDCATALOG TO GT_FIELDCATALOG .
ENDLOOP .
LS_LAYOUT - COLWIDTH_OPTIMIZE = 'X' .
LS_LAYOUT - ZEBRA = 'X' .
LS_LAYOUT - DETAIL_INITIAL_LINES = 'X' .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_GRID_TITLE = LV_GRID_TITLE
IS_LAYOUT = LS_LAYOUT
IT_FIELDCAT = GT_FIELDCATALOG
I_CALLBACK_PROGRAM = SY - REPID "
* I_CALLBACK_PF_STATUS_SET = 'ZFORM_SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND'
TABLES
T_OUTTAB = GT_ALV
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2 .
IF SY - SUBRC <> 0 .
MESSAGE ID SY - MSGID TYPE SY - MSGTY NUMBER SY - MSGNO
WITH SY - MSGV1 SY - MSGV2 SY - MSGV3 SY - MSGV4 .
ENDIF . " FRM_SHOW_FC
ENDFORM .
![ALVcheckbox相关数据同时勾选或者同时取消 ALVcheckbox相关数据同时勾选或者同时取消](https://i-blog.csdnimg.cn/blog_migrate/255d188dd6b0dd3dfb733a5303d4287e.jpeg)