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

本实例仿照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. 


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值