table control的修改排序删除功能实现实例

    xiaoxiao2021-12-14  20

    本实例仿照SAP DEMO而写 DEMO名称是:demo_dynpro_tabcont_loop_at,自动动手写一次的目的是把将该程序的注释写明白一点,希望本文对刚入门的博友在理解table control有一点帮助,依然很恶心这编辑器不能很方便的插入图片。

     

    主程序:

    *声明table control里面表控件使用的结构 TABLES demo_conn. *声明table control CONTROLS sflight TYPE TABLEVIEW USING SCREEN 100. *定义control cols表的行工作区 DATA col LIKE LINE OF sflight-cols. *定义一个整型变量用来存储内表行数 DATA fill TYPE i. *定义内表用来填充control的table DATA itab TYPE STANDARD TABLE OF demo_conn. *定义OK_CODE 存储ftcode DATA ok_code TYPE sy-ucomm. DATA ok_save TYPE sy-ucomm. *---------------------------------------------------------* *Event blocks                                             * *---------------------------------------------------------* *start-of-selection event--------------------------------- START-OF-SELECTION. *获取数据   SELECT *     FROM spfli     INTO CORRESPONDING FIELDS OF TABLE itab. *取得内表行数   DESCRIBE TABLE itab LINES fill. *初始化table control的行数   sflight-lines = fill.   CALL SCREEN 100. *&---------------------------------------------------------------------* *&      Module  STATUS_0100  OUTPUT *&---------------------------------------------------------------------* *       设置菜单 工具 栏 *----------------------------------------------------------------------* MODULE status_0100 OUTPUT.    SET PF-STATUS 'STATUS_001'. *  SET TITLEBAR 'xxx'. ENDMODULE.                 " STATUS_0100  OUTPUT *&---------------------------------------------------------------------* *&      Module  MODIFY_CT  INPUT *&---------------------------------------------------------------------* *       更新内表 *----------------------------------------------------------------------* MODULE modify_ct INPUT.   MODIFY itab FROM demo_conn INDEX sflight-current_line. ENDMODULE.                 " MODIFY_CT  INPUT *&---------------------------------------------------------------------* *&      Module  USER_COMMAND_0100  INPUT *&---------------------------------------------------------------------* *       处理那些按钮事件 *----------------------------------------------------------------------* MODULE user_command_0100 INPUT.   ok_save = ok_code.   CLEAR ok_code.   CASE ok_save.     WHEN 'CHANGE'. *当点击修改按钮,此时要需要修改control cols的input属性(cols包含所有列相关信息)       LOOP AT sflight-cols INTO col WHERE index GT 2.         IF col-screen-input EQ '1'.           col-screen-input = '0'.           modify sflight-cols from col index sy-tabix.         ELSEIF col-screen-input EQ '0'.           col-screen-input = '1'.           modify sflight-cols from col index sy-tabix.         ELSE.         ENDIF.       ENDLOOP. *当点击sort_down按钮,此时需要对内表针对选中的地列进行排序     WHEN 'SORT_DOWN'.       READ TABLE sflight-cols INTO col WITH KEY selected = 'X'.       IF sy-subrc = 0.       SORT itab BY (col-screen-name+10) DESCENDING.       col-selected = ''.       MODIFY  sflight-cols FROM col INDEX sy-tabix.       ENDIF. *当点击sort_up按钮。。。。 。。。     WHEN 'SORT_UP'.       READ TABLE sflight-cols INTO col WITH KEY selected = 'X'.       IF sy-subrc = 0.       SORT itab BY (col-screen-name+10) ASCENDING.       col-selected = ''.       MODIFY  sflight-cols FROM col INDEX sy-tabix.       ENDIF. *当点击删除按钮,此时需要更新内表     WHEN 'DELETE'.       READ TABLE sflight-cols INTO col WITH KEY screen-input = '1'.       IF sy-subrc = 0.         LOOP AT itab INTO demo_conn WHERE mark = 'X'.           DELETE itab INDEX sy-tabix.         ENDLOOP.       ENDIF.     WHEN OTHERS.   ENDCASE. ENDMODULE.                 " USER_COMMAND_0100  INPUT *&---------------------------------------------------------------------* *&      Module  READ_DATA  OUTPUT *&---------------------------------------------------------------------* *       读取内表数据 *----------------------------------------------------------------------* MODULE read_data OUTPUT.   READ TABLE itab INTO demo_conn INDEX sflight-current_line. ENDMODULE.                 " READ_DATA  OUTPUT *&---------------------------------------------------------------------* *&      Module  CANCEL  INPUT *&---------------------------------------------------------------------* *       强制退出 *----------------------------------------------------------------------* MODULE cancel INPUT.   LEAVE PROGRAM. ENDMODULE.                 " CANCEL  INPUT

     

     

     

    屏幕逻辑流:

    PROCESS BEFORE OUTPUT.   MODULE status_0100.   LOOP WITH CONTROL sflight.     MODULE read_data.   ENDLOOP. PROCESS AFTER INPUT.   MODULE cancel AT EXIT-COMMAND.   LOOP WITH CONTROL sflight.     MODULE modify_ct.   ENDLOOP.   MODULE user_command_0100.

    转载请注明原文地址: https://ju.6miu.com/read-964018.html

    最新回复(0)