首页 > 代码库 > function ALV
function ALV
自我ALV 理解学习,集有 回车事件 ,自定义按钮,ALV网格颜色。
REPORT ZALV_TEST.TYPE-POOLS:ZSLIS.DATA:BEGIN OF GT_DATA OCCURS 0, "显示数据内表。 MATNR LIKE MARA-MATNR, "物料 MATKL LIKE MARA-MATKL, "物料组 BISMT LIKE MARA-BISMT, "旧物料 MEINS LIKE MARA-MEINS, "基本单位 COLOR(4) TYPE C, END OF GT_DATA.DATA: BEGIN OF GT_DATA2 OCCURS 0. INCLUDE STRUCTURE GT_DATA.DATA: CE_COLOR TYPE SLIS_T_SPECIALCOL_ALV.DATA: END OF GT_DATA2.DATA:GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV.DATA: GIT_EVENTS TYPE SLIS_T_EVENT. "ALV 事件DATA TEM_GRID TYPE REF TO CL_GUI_ALV_GRID.*----------------------------------------------------------------------** CLASS LCL_EVENT_RECEIVER DEFINITION*----------------------------------------------------------------------***----------------------------------------------------------------------*CLASS LCL_EVENT_RECEIVER DEFINITION. PUBLIC SECTION. " 回车事件 METHODS HANDLE_MODIFY FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID IMPORTING E_MODIFIED ET_GOOD_CELLS. " 鼠标离开事件 METHODS HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID IMPORTING ER_DATA_CHANGED E_ONF4 E_ONF4_BEFORE E_ONF4_AFTER E_UCOMM.ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION*----------------------------------------------------------------------** CLASS LCL_EVENT_RECEIVER IMPLEMENTATION*----------------------------------------------------------------------***----------------------------------------------------------------------*CLASS LCL_EVENT_RECEIVER IMPLEMENTATION. METHOD HANDLE_MODIFY. MESSAGE: S000(Z001) WITH ‘回车‘. ENDMETHOD. "HANDLE_MODIFY METHOD HANDLE_DATA_CHANGED. DATA STBL TYPE LVC_S_STBL. PERFORM HANDLE_DATA_CHANGED USING ER_DATA_CHANGED. "处理受变化的数据* 稳定刷新 STBL-ROW = ‘X‘." 基于行的稳定刷新 STBL-COL = ‘X‘." 基于列稳定刷新 CALL METHOD TEM_GRID->REFRESH_TABLE_DISPLAY EXPORTING IS_STABLE = STBL. ENDMETHOD. "HANDLE_MODIFYENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATIONDATA GT_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER . " 定义类START-OF-SELECTION. PERFORM GET_DATA. " PERFORM SET_FIELDCAT. " PERFORM ALV_LAYOUT. " 设置行颜色 PERFORM GET_EVENT. " 设置事件 PERFORM ALV_SHOW. "PERFORM SET_COLOR. "设置单元格颜色*&---------------------------------------------------------------------**& Form get_event*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM GET_EVENT. DATA FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE ‘FRM_TOP_OF_PAGE‘. DATA L_EVENTS TYPE LINE OF SLIS_T_EVENT. CALL FUNCTION ‘REUSE_ALV_EVENTS_GET‘ EXPORTING I_LIST_TYPE = 0 IMPORTING ET_EVENTS = GIT_EVENTS EXCEPTIONS LIST_TYPE_WRONG = 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. CLEAR L_EVENTS. READ TABLE GIT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE INTO L_EVENTS. L_EVENTS-NAME = ‘CALLER_EXIT‘. "事件名 L_EVENTS-FORM = ‘FM_BUTTON‘. "处理事件FORM APPEND L_EVENTS TO GIT_EVENTS.ENDFORM. "get_event*&---------------------------------------------------------------------**& Form fm_button*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->E_GRID text*----------------------------------------------------------------------*FORM FM_BUTTON USING E_GRID TYPE SLIS_DATA_CALLER_EXIT. " 得到当前的 ALV CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR‘* EXPORTING* IR_SALV_FULLSCREEN_ADAPTER = IMPORTING E_GRID = TEM_GRID .* 设置enter事件 CALL METHOD TEM_GRID->REGISTER_EDIT_EVENT EXPORTING I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER EXCEPTIONS ERROR = 1 OTHERS = 2.* 设置 单光标焦点移开被修改单元格后既触发事件 CALL METHOD TEM_GRID->REGISTER_EDIT_EVENT EXPORTING I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED EXCEPTIONS ERROR = 1 OTHERS = 2. "创建类对象 CREATE OBJECT GT_EVENT_RECEIVER. " 设置方法 SET HANDLER GT_EVENT_RECEIVER->HANDLE_MODIFY FOR TEM_GRID. SET HANDLER GT_EVENT_RECEIVER->HANDLE_DATA_CHANGED FOR TEM_GRID.ENDFORM. "fm_button*&---------------------------------------------------------------------**& Form handle_data_changed*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->P_ER_DATA_CHANGED text*----------------------------------------------------------------------*FORM HANDLE_DATA_CHANGED USING P_ER_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL. DATA:MOD_DATA TYPE LVC_T_MODI, WA_MOD_DATA TYPE LVC_S_MODI. MOD_DATA = P_ER_DATA_CHANGED->MT_MOD_CELLS. " 获取变更后列 DATA:ROW_ID TYPE I, C_VALUE(130) TYPE C, "变更后的值 C_NAME(30) TYPE C. "变更的列名 CLEAR:ROW_ID, C_VALUE,C_NAME. LOOP AT MOD_DATA INTO WA_MOD_DATA. ROW_ID = WA_MOD_DATA-ROW_ID. C_NAME = WA_MOD_DATA-FIELDNAME. C_VALUE = WA_MOD_DATA-VALUE. ENDLOOP. MESSAGE S000(Z001) WITH ‘修改成功‘.ENDFORM. "HANDLE_DATA_CHANGED*&---------------------------------------------------------------------**& Form get_data*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM GET_DATA. SELECT MARA~MATNR MARA~MATKL MARA~BISMT MARA~MEINS FROM MARA INTO TABLE GT_DATA UP TO 100 ROWS.ENDFORM. "get_data*&---------------------------------------------------------------------**& Form SET_FIELDCAT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM SET_FIELDCAT. DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV. LS_FIELDCAT-FIELDNAME = ‘MATNR‘. LS_FIELDCAT-SELTEXT_L = ‘物料‘. LS_FIELDCAT-KEY = ‘X‘. "关键列 LS_FIELDCAT-EDIT = ‘X‘. " LS_FIELDCAT-EMPHASIZE = ‘C100‘. "列颜色 APPEND LS_FIELDCAT TO GT_FIELDCAT. CLEAR: LS_FIELDCAT. LS_FIELDCAT-FIELDNAME = ‘MATKL‘. LS_FIELDCAT-SELTEXT_L = ‘物料组‘. " LS_FIELDCAT-EMPHASIZE = ‘C200‘. "列颜色 APPEND LS_FIELDCAT TO GT_FIELDCAT. CLEAR: LS_FIELDCAT. LS_FIELDCAT-FIELDNAME = ‘BISMT‘. LS_FIELDCAT-SELTEXT_L = ‘旧物料‘. " LS_FIELDCAT-EMPHASIZE = ‘C300‘. "列颜色 APPEND LS_FIELDCAT TO GT_FIELDCAT. CLEAR: LS_FIELDCAT. LS_FIELDCAT-FIELDNAME = ‘MEINS‘. LS_FIELDCAT-SELTEXT_L = ‘基本单位‘. " LS_FIELDCAT-EMPHASIZE = ‘C400‘. "列颜色 APPEND LS_FIELDCAT TO GT_FIELDCAT. CLEAR: LS_FIELDCAT.ENDFORM. "SET_FIELDCAT*&---------------------------------------------------------------------**& Form ALV_LAYOUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM ALV_LAYOUT. DATA: L_COLOR(4) TYPE C, L_CHAR TYPE C, I TYPE I. LOOP AT GT_DATA. L_CHAR = SY-INDEX. IF SY-TABIX MOD 2 = 0. CONCATENATE ‘C‘ ‘101‘ INTO L_COLOR. ELSE. CONCATENATE ‘C‘ ‘210‘ INTO L_COLOR. ENDIF. GT_DATA-COLOR = L_COLOR. MODIFY GT_DATA. ENDLOOP. GS_LAYOUT-INFO_FIELDNAME = ‘COLOR‘. "设置行的颜色ENDFORM. "ALV_LAYOUT*&---------------------------------------------------------------------**& Form set_COLOR*&---------------------------------------------------------------------** text 设置单元个颜色*----------------------------------------------------------------------*FORM SET_COLOR. DATA: COLOR_WA TYPE SLIS_T_SPECIALCOL_ALV WITH HEADER LINE."单元格颜色属性内表 LOOP AT GT_DATA. MOVE-CORRESPONDING GT_DATA TO GT_DATA2. "转移数据到itab_test3内表 REFRESH COLOR_WA. " 第一列颜色 COLOR_WA-COLOR-COL = ‘2‘. "颜色代码 COLOR_WA-COLOR-INT = ‘0‘. COLOR_WA-COLOR-INV = ‘0‘. COLOR_WA-FIELDNAME = ‘MATNR‘. APPEND COLOR_WA. " CONCATENATE L_CHAR ‘00‘ INTO ITAB_TEST3-COL1. " 第二列颜色 COLOR_WA-COLOR-INT = ‘0‘. COLOR_WA-COLOR-INV = ‘1‘. COLOR_WA-FIELDNAME = ‘MATKL‘. APPEND COLOR_WA. " CONCATENATE L_CHAR ‘01‘ INTO ITAB_TEST3-COL2. " 第三列颜色 COLOR_WA-COLOR-INT = ‘1‘. COLOR_WA-COLOR-INV = ‘0‘. COLOR_WA-FIELDNAME = ‘BISMT‘. APPEND COLOR_WA. " CONCATENATE L_CHAR ‘10‘ INTO ITAB_TEST3-COL3. GT_DATA2-CE_COLOR[] = COLOR_WA[]. APPEND GT_DATA2. ENDLOOP. GS_LAYOUT-COLTAB_FIELDNAME = ‘CE_COLOR‘. CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY‘ EXPORTING IS_LAYOUT = GS_LAYOUT IT_FIELDCAT = GT_FIELDCAT[] TABLES T_OUTTAB = GT_DATA2.ENDFORM. "set_COLOR*&---------------------------------------------------------------------**& Form ALV_SHOW*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM ALV_SHOW. CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY‘ EXPORTING* I_INTERFACE_CHECK = ‘ ‘* I_BYPASSING_BUFFER = ‘ ‘* I_BUFFER_ACTIVE = ‘ ‘ I_CALLBACK_PROGRAM = SY-REPID "返回的调用程序 I_CALLBACK_PF_STATUS_SET = ‘SET_PF_STATUS‘ "ALV状态栏 I_CALLBACK_USER_COMMAND = ‘USER_COMMAND‘ "按钮方法* I_CALLBACK_TOP_OF_PAGE = ‘ ‘* I_CALLBACK_HTML_TOP_OF_PAGE = ‘ ‘* I_CALLBACK_HTML_END_OF_LIST = ‘ ‘* I_STRUCTURE_NAME =* I_BACKGROUND_ID = ‘ ‘* I_GRID_TITLE =* I_GRID_SETTINGS = IS_LAYOUT = GS_LAYOUT IT_FIELDCAT = GT_FIELDCAT[]* IT_EXCLUDING =* IT_SPECIAL_GROUPS =* IT_SORT =* IT_FILTER =* IS_SEL_HIDE =* I_DEFAULT = ‘X‘* I_SAVE = ‘ ‘ "是否保存变式* IS_VARIANT = IT_EVENTS = GIT_EVENTS* IT_EVENT_EXIT =* IS_PRINT =* IS_REPREP_ID =* I_SCREEN_START_COLUMN = 0* I_SCREEN_START_LINE = 0* I_SCREEN_END_COLUMN = 0* I_SCREEN_END_LINE = 0* I_HTML_HEIGHT_TOP = 0* I_HTML_HEIGHT_END = 0* IT_ALV_GRAPHICS =* IT_HYPERLINK =* IT_ADD_FIELDCAT =* IT_EXCEPT_QINFO =* IR_SALV_FULLSCREEN_ADAPTER =* IMPORTING* E_EXIT_CAUSED_BY_CALLER =* ES_EXIT_CAUSED_BY_USER = TABLES T_OUTTAB = GT_DATA[]* EXCEPTIONS* PROGRAM_ERROR = 1* OTHERS = 2 . IF SY-SUBRC <> 0.* Implement suitable error handling here ENDIF.ENDFORM. "ALV_SHOW*&---------------------------------------------------------------------**& Form SET_PF_STATUS*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS ‘STANDARD‘.ENDFORM. "SET_PF_STATUS*&---------------------------------------------------------------------**& Form USER_COMMAND*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->UCOMM text* -->FILECAT text*----------------------------------------------------------------------*FORM USER_COMMAND USING UCOMM TYPE SY-UCOMM FILECAT TYPE SLIS_SELFIELD.case ucomm. when ‘/&PRINT‘. MESSAGE S000(Z001) with ‘你点击了打印‘. endcase.ENDFORM. "USER_COMMAND
function ALV
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。