0
点赞
收藏
分享

微信扫一扫

ALVcheckbox相关数据同时勾选或者同时取消_SAP刘梦_新浪博客


当勾选任意一行数据时,同CARRID字段都打钩。当再点击来取消勾选时,相同CARRID数据同时取消勾选。


效果图:


​​

ALVcheckbox相关数据同时勾选或者同时取消_SAP刘梦_新浪博客_python

​​

除了常用的全选,取消全选。这个功能有时候会用到。


直接上干货。

主要逻辑都可以直接复用,把画红框的结构换成自己的就行了。

ALV需要显示的,都可以copy过去稍微改改即可。


​​

ALVcheckbox相关数据同时勾选或者同时取消_SAP刘梦_新浪博客_checkbox_02

​​


DEMO:


​​

ALVcheckbox相关数据同时勾选或者同时取消_SAP刘梦_新浪博客_机器学习_03

​​

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

​​


​​



举报

相关推荐

0 条评论