checkbox 选中_SAP ABAP FUNCATION ALV控件 选中的例子DEMO

11d990e80bfe5f2d1a532778c30a2d13.png

加一些DEMO吧,强化一下,ALV的用法老是忘记啊。 这个DEMO的效果,我们在ALV 控件最左边选中一行,可以知道我们选中了: f361ff57a011e29bab9722453b5696e9.png 一、ALV工具条上加一个自定义按钮: SE38中新建一个程序ZALV_SELECT,这个程序一开始只有代码,但是我们的ALV控件工作起来,其实有一个工具条。 而且这个工具条,需要我们自己定义一个按钮。这个工具条怎么来呢?其实拷贝来改改最方便: 1、SE80中选SLVC_FULLSCREEN函数组 169163446fbce59a58a706fb0872e7fc.png 2、点右键复制,目前程序填上我们的程序名ZALV_SELECT,搞定。 aeb3f5d27f28de58f863a69e7daaacc1.png 3、我们的程序中打开工具条,加上我们的自定义按钮,完成。最后注意工具条要激活! c6e57bcad2a6c8a1f674de49a371c242.png 二、完整的代码和代码重点说明: 1、选中的状态其实是在一个仅一个字节的字段中打一个X,保留原表的结构,加一个选中字段,注意看GT_TABLE的GS_USR21是怎么申明的。 2、ALV有2个关键的参数,FILEDCAT字段参数和LAYOUT布局参数。字段参数是给一张表,而布局参数只是一行结构。 3、在ALV_USER_COMMAND回调的FM中实现用户自己的一些控制和操作。 *&---------------------------------------------------------------------* *& REPORT ZALV_SELECT *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZALV_SELECT.   DATA: GT_FCAT TYPE LVC_T_FCAT. DATA: GS_LOUT TYPE LVC_S_LAYO.     DATA BEGIN OF GS_USR21.        INCLUDE STRUCTURE USR21. DATA   SELXXX  TYPE C.  "用来记录行选择的字段 DATA END OF GS_USR21. DATA GT_TABLE LIKE TABLE OF GS_USR21. START-OF-SELECTION. SELECT * INTO TABLE GT_TABLE FROM USR21. END-OF-SELECTION. PERFORM FM_INIT_ALV. PERFORM FM_SHOW_ALV TABLES GT_TABLE                           USING GT_FCAT                                 GS_LOUT. FORM FM_INIT_ALV . "===============FIELDCAT字段参数===================             PERFORM ADD_FIELD_LVC TABLES GT_FCAT                                 USING 'BNAME' '' '' '' '' '编号' '' '' '' '' ''.             PERFORM ADD_FIELD_LVC TABLES GT_FCAT                                 USING 'PERSNUMBER' '' '' '' '' '编号' '' '' '' '' ''.   "===============LAYOUT 布局参数===================   GS_LOUT-BOX_FNAME = 'SELXXX'.   GS_LOUT-ZEBRA = 'X'.   GS_LOUT-CWIDTH_OPT = 'X'.   GS_LOUT-STYLEFNAME = 'EDIT_T_STYLE'. "指定编辑状态的字段名,还需要把某列先打开为可编辑   ENDFORM.     FORM ADD_FIELD_LVC TABLES GT_FIELDCAT_LVC STRUCTURE LVC_S_FCAT                                            USING I_FIELDNAME TYPE LVC_RFNAME                                                  I_REF_FIELD TYPE LVC_RFNAME                                                  I_REF_TABLE TYPE LVC_TNAME                                                  I_KEY TYPE C                                                  I_QFIELDNAME TYPE LVC_QFNAME                                                  I_TEXT TYPE STRING                                                  I_EDIT TYPE C                                                  I_NZERO TYPE C                                                  I_F4 TYPE C                                                  I_BOX TYPE C                                                  I_ICON TYPE C                                        .     DATA GS_FIELDCAT_LVC TYPE LVC_S_FCAT.     CLEAR GS_FIELDCAT_LVC.     GS_FIELDCAT_LVC-FIELDNAME = I_FIELDNAME.   GS_FIELDCAT_LVC-REF_FIELD = I_REF_FIELD.   GS_FIELDCAT_LVC-REF_TABLE = I_REF_TABLE.   GS_FIELDCAT_LVC-KEY       = I_KEY.   GS_FIELDCAT_LVC-QFIELDNAME = I_QFIELDNAME.   GS_FIELDCAT_LVC-COLDDICTXT = 'L'.   GS_FIELDCAT_LVC-SCRTEXT_L = I_TEXT.   GS_FIELDCAT_LVC-EDIT = I_EDIT.   GS_FIELDCAT_LVC-NO_ZERO = I_NZERO.   GS_FIELDCAT_LVC-F4AVAILABL = I_F4.   GS_FIELDCAT_LVC-CHECKBOX      = I_BOX. "搞成CHECKBOX   GS_FIELDCAT_LVC-ICON = I_ICON.   "设置字段的颜色   IF I_FIELDNAME = 'BNAME'.       GS_FIELDCAT_LVC-EMPHASIZE = 'C700'.   ENDIF.       IF I_FIELDNAME = 'SELXXX'.         "GS_FIELDCAT_LVC-CHECKBOX = 'X'.     "GS_FIELDCAT_LVC-FIX_COLUMN = 'X'.       ENDIF.     APPEND GS_FIELDCAT_LVC TO GT_FIELDCAT_LVC.   ENDFORM.                       "ADD_FIELD_LVC   FORM FM_SHOW_ALV TABLES IT_OUTTAB                     USING IT_FIELDCAT TYPE LVC_T_FCAT                           I_LAYOUT TYPE LVC_S_LAYO.         DATA GS_EVENT TYPE SLIS_ALV_EVENT.         DATA GT_EVENT TYPE SLIS_T_EVENT.         GS_EVENT-NAME = 'PF_STATUS_SET'.         GS_EVENT-FORM = 'ALV_STATUS_SET'.         APPEND GS_EVENT TO GT_EVENT.       CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'         EXPORTING           I_CALLBACK_PROGRAM       = SY-CPROG        "   I_CALLBACK_PF_STATUS_SET = I_STATUS               IT_EVENTS               = GT_EVENT             "我们加了           I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND'   "我们加了          "   I_CALLBACK_TOP_OF_PAGE   = I_TITLE           IS_LAYOUT_LVC            = I_LAYOUT           IT_FIELDCAT_LVC          = IT_FIELDCAT           I_SAVE                   = 'A'         TABLES           T_OUTTAB                 = GT_TABLE         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. ENDFORM.                    "SUB_CALL_ALV       "------------加载STATUS的FORM--------------------   FORM ALV_STATUS_SET USING PT_EXTAB TYPE SLIS_T_EXTAB.     CLEAR: PT_EXTAB[].     SET PF-STATUS 'STANDARD_FULLSCREEN'.   ENDFORM. "------------点了ALV工具条的按钮-------------------- FORM ALV_USER_COMMAND USING P_UCOMM LIKE SY-UCOMM P_SELFIELD TYPE SLIS_SELFIELD.  "P_SELFIELD 用户鼠标选择的一个字段   "应用方法将修改ALV的数据保存到内表中     DATA LR_GRID TYPE REF TO CL_GUI_ALV_GRID.     DATA L_TABIX LIKE SY-TABIX.  "系统参数   行号   "此处代码将用户输入读入内表(这一步不可少)     CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "自动刷新数据       IMPORTING         E_GRID = LR_GRID.     CALL METHOD LR_GRID->CHECK_CHANGED_DATA.     P_SELFIELD-REFRESH = 'X'. "此处代码阻止'REUSE_ALV_GRID_DISPLAY创建新的屏幕,造成屏幕多层     P_SELFIELD-ROW_STABLE = 'X'. "保证行、列位置在自动刷新时不变     P_SELFIELD-COL_STABLE = 'X'.   CASE P_UCOMM.     WHEN 'B1'.       DATA:L_COUNT TYPE N,        L_MSG   TYPE CHAR100.       LOOP AT GT_TABLE TRANSPORTING NO FIELDS WHERE SELXXX = 'X'.         L_COUNT = L_COUNT + 1.       ENDLOOP.       CONCATENATE 'SELECT'                   L_COUNT                   'ROWS'              INTO L_MSG          SEPARATED BY SPACE.       MESSAGE L_MSG TYPE 'I'.     WHEN 'B2'.   ENDCASE. ENDFORM. 028dd397297fe41caeeda91835b5ace2.gif 8e5cfd2aa352f3c4b30050bea307fcf3.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值