ABAP Table Control with LOOP AT ITAB Demo

系统标准demo 可参考:demo_dynpro_tabcont_loop_at  DEMO_DYNPRO_TABCONT_LOOP

Demo 程序最终效果展示

 实现步骤

1 创建程序 一个测试程序

2  第二步  声明 变量 用于table control 

DATA:gt_zstudent TYPE STANDARD TABLE OF  zls_zstudent WITH HEADER LINE.
DATA:gs_zstudent TYPE   zls_zstudent.

3  CALL SCREEN 100 .

创建100屏幕

4 第四步如图示

5  给 table control 命名

6 第六步选择如图示

 输入第二步的声明

 跟着向导下一步

选择需要显示的字段

继续下一步如图

图示box 用于选择控制所选择的行

一直跟着向导直至完成

然后激活程序,系统会自动生成一些代码。

7 第七步 我们对生成程序进行改造

添加状态栏,自定义图标如图示

 然后注释掉PAI 里面的

*MODULE zstudent_user_command.

添加 MODULE user_command_0100.

对 自定义按钮事件的实现逻辑

MODULE user_command_0100 INPUT.
  DATA:lv_code             TYPE sy-ucomm.
  lv_code = ok_code.
  CLEAR ok_code.
  CASE lv_code.
    WHEN '&F03' OR '&F15' OR '&F12'.
      LEAVE TO SCREEN  0.
    WHEN 'TOGGLE'.
*对应列
      LOOP AT zstudent-cols INTO gs_cols WHERE index GT 0.
        IF  gs_cols-screen-input = '0'.
          gs_cols-screen-input = '1'.
        ELSEIF  gs_cols-screen-input = '1'.
          gs_cols-screen-input = '0'.
        ENDIF.
        MODIFY zstudent-cols FROM gs_cols INDEX sy-tabix.
      ENDLOOP.
    WHEN 'SORT_UP'.
      READ TABLE zstudent-cols INTO gs_cols WITH KEY selected = 'X'.
*长度13是屏幕字段长度 (zls_zstudent-)
      IF sy-subrc = 0.
        SORT gt_zstudent STABLE BY (gs_cols-screen-name+13) ASCENDING.
        gs_cols-selected = ' '.
        MODIFY zstudent-cols FROM gs_cols INDEX sy-tabix.
      ENDIF.
    WHEN 'SORT_DOWN'.
      READ TABLE zstudent-cols INTO gs_cols WITH KEY selected = 'X'.
      IF sy-subrc = 0.
        SORT gt_zstudent STABLE BY (gs_cols-screen-name+13) DESCENDING.
        gs_cols-selected = ' '.
        MODIFY zstudent-cols FROM gs_cols INDEX sy-tabix.
      ENDIF.
    WHEN 'DELETE'.
      LOOP AT gt_zstudent INTO gs_zstudent WHERE box = 'X'.
        DELETE gt_zstudent.
      ENDLOOP.
    WHEN 'INSERT'.

      APPEND INITIAL LINE TO gt_zstudent.

  ENDCASE.
ENDMODULE.

然后在程序中添加获取数据以及屏幕是否可输入控制

 如下图

最后一步

在屏幕的table control 设置一下属性如图示

 不然table control 没办法排序降序 以及 被选中行

删除系统自动生成的多余代码

完整代码程序如下:

*&---------------------------------------------------------------------*
*& Report ZTEST_11
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest_11.

DATA:gt_zstudent TYPE STANDARD TABLE OF  zls_zstudent WITH HEADER LINE.
DATA:gs_zstudent TYPE zls_zstudent.

*&SPWIZARD: DECLARATION OF TABLECONTROL 'ZSTUDENT' ITSELF
CONTROLS: zstudent TYPE TABLEVIEW USING SCREEN 0100.
DATA   gs_cols LIKE LINE OF zstudent-cols.
*&SPWIZARD: LINES OF TABLECONTROL 'ZSTUDENT'
DATA:     g_zstudent_lines  LIKE sy-loopc.

DATA:     ok_code LIKE sy-ucomm.

START-OF-SELECTION.

*获取数据
  PERFORM get_data.

  PERFORM set_col_input.


  CALL SCREEN 100.



*&SPWIZARD: OUTPUT MODULE FOR TC 'ZSTUDENT'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE zstudent_change_tc_attr OUTPUT.
  DESCRIBE TABLE gt_zstudent LINES zstudent-lines.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'ZSTUDENT'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE zstudent_get_lines OUTPUT.
  g_zstudent_lines = sy-loopc.
ENDMODULE.

*&SPWIZARD: INPUT MODUL FOR TC 'ZSTUDENT'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MARK TABLE
MODULE zstudent_mark INPUT.
   MODIFY gt_zstudent FROM gs_zstudent INDEX zstudent-current_line.
ENDMODULE.

*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'ZTEST'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  DATA:lv_code             TYPE sy-ucomm.
  lv_code = ok_code.
  CLEAR ok_code.
  CASE lv_code.
    WHEN '&F03' OR '&F15' OR '&F12'.
      LEAVE TO SCREEN  0.
    WHEN 'TOGGLE'.
*对应列
      LOOP AT zstudent-cols INTO gs_cols WHERE index GT 0.
        IF  gs_cols-screen-input = '0'.
          gs_cols-screen-input = '1'.
        ELSEIF  gs_cols-screen-input = '1'.
          gs_cols-screen-input = '0'.
        ENDIF.
        MODIFY zstudent-cols FROM gs_cols INDEX sy-tabix.
      ENDLOOP.
    WHEN 'SORT_UP'.
      READ TABLE zstudent-cols INTO gs_cols WITH KEY selected = 'X'.
*长度13是屏幕字段长度 (gs_zstudent-)
      IF sy-subrc = 0.
        SORT gt_zstudent STABLE BY (gs_cols-screen-name+12) ASCENDING.
        gs_cols-selected = ' '.
        MODIFY zstudent-cols FROM gs_cols INDEX sy-tabix.
      ENDIF.
    WHEN 'SORT_DOWN'.
      READ TABLE zstudent-cols INTO gs_cols WITH KEY selected = 'X'.
      IF sy-subrc = 0.
        SORT gt_zstudent STABLE BY (gs_cols-screen-name+12) DESCENDING.
        gs_cols-selected = ' '.
        MODIFY zstudent-cols FROM gs_cols INDEX sy-tabix.
      ENDIF.
    WHEN 'DELETE'.
      LOOP AT gt_zstudent INTO gs_zstudent WHERE box = 'X'.
        DELETE gt_zstudent.
      ENDLOOP.
    WHEN 'INSERT'.

      APPEND INITIAL LINE TO gt_zstudent.

  ENDCASE.
ENDMODULE.
FORM get_data .
  SELECT * FROM zstudent INTO CORRESPONDING FIELDS OF TABLE gt_zstudent.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form set_col_input
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM set_col_input .
  LOOP AT zstudent-cols INTO gs_cols WHERE index GT 0.
*Set not input 0
*Set  input 1
    gs_cols-screen-input = '0'.
    MODIFY zstudent-cols FROM gs_cols INDEX sy-tabix.
  ENDLOOP.
ENDFORM.

100 屏幕 PBO / PAI 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值