table control 大致制作步骤

1、TABLE CONTROL是需要引用数据字典的表结构或者表的。

首先我们建立一个数据库表zaperson。

表结构: 

2、建立一个屏幕 100 。

同时我们定义一个table control   ZPER 同时引用表zaperson

当然我们同时需要在程序中定义这个同名的table control 。

TABLES :  ZAPERSON.
CONTROLS ZPER TYPE TABLEVIEW USING SCREEN 100 .  “定义这个同名的table control 

3、定义内表 且传值
DATA GI_ZP LIKE TABLE OF ZAPERSON .
DATA GW_ZP LIKE ZAPERSON .

START-OF-SELECTION .
SELECT  FROM ZAPERSON INTO TABLE GI_ZP .

4、调用屏幕 

  CALL SCREEN 100 .

PBO中给table control 赋值。

a、首先我们需要把内表的行数赋值给table control  

MODULE INIT .

MODULE INIT OUTPUT.
DESCRIBE TABLE GI_ZP LINES ZPER-LINES.
ENDMODULE.          
b、给table control赋值

LOOP AT GI_ZP INTO GW_ZP WITH CONTROL ZPER CURSOR ZPER-CURRENT_LINE  .
MODULE DISPLAY .
ENDLOOP.

MODULE DISPLAY OUTPUT.
MOVE-CORRESPONDING  GW_ZP  TO ZAPERSON.
ENDMODULE.     


4、现在差不多就可以显示结果了 但是不知道为啥 PAI里面不写点东西 总是爱报语法错误 。我们可以写个chain 进去  反正多一步检查总是好的 

*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.

LOOP AT GI_ZP .
  CHAIN .
  FIELD ZAPERSON-FNAME .
  FIELD ZAPERSON-LNAME .
  ENDCHAIN .
  ENDLOOP .


5、下面我们就可以看到自己的成果了



6、当然有时候我们需要有一些自己的东西  刚才仅仅是展示  有时候 我们需要修改和保存  我们怎么实现数据的保存呢,其实很简单

table control的工作原理是:1、 在PBO中 我们将数据存储到table control 。那我们第一次打开的时候 就能看到内表的值

2、我们在页面上可能做一些修改 之后我们需要进行保存修改等按钮操作。这个中间 我们需要干的事情  就是 将table control的值重新赋予给内表

3、  在MODULE USER_COMMAND_XXXX中,我们进行按钮操作。将内表保存到数据库中。同时重新在PBO中进行展示。

大致如下:

PROCESS BEFORE OUTPUT.

  MODULE INITS.   "给当前的CONTROL 可用行数  一般为当前展示的内表的行数
  MODULE STATUS_0200.
  LOOP AT G_ZMAR_ITAB INTO G_ZMAR_WA  WITH CONTROL ZMAR
     CURSOR ZMAR-CURRENT_LINE .
    MODULE   DISPALY .  "循环展示 此loop 是一行行的读取control的行 之后用display 填充值 对应上面的步骤一

  ENDLOOP.

*
PROCESS AFTER INPUT.
  LOOP AT G_ZMAR_ITAB.
    CHAIN.
*      FIELD ZMARKETDISPOSE-MANDT.
      FIELD ZMARKETDISPOSE-ARTNR.
      FIELD ZMARKETDISPOSE-BEGDA.
      FIELD ZMARKETDISPOSE-ENDDA.
      FIELD ZMARKETDISPOSE-ZPRICE.
      FIELD ZMARKETDISPOSE-ERNAM.
      FIELD ZMARKETDISPOSE-CRDATU.
      FIELD ZMARKETDISPOSE-UPNAM.
      FIELD ZMARKETDISPOSE-UPDATU.
    ENDCHAIN.
    MODULE   UPDATE .  对应上面的步骤二
  ENDLOOP.


  MODULE USER_COMMAND_0200. 对应上面的步骤三

MODULE DISPALY OUTPUT.
  MOVE-CORRESPONDING G_ZMAR_WA TO ZMARKETDISPOSE.
  "设置指定单位***
  IF G_ZMAR_WA-IFLAG C_X .
    LOOP AT SCREEN.
      IF (   SCREEN-NAME 'ZMARKETDISPOSE-ARTNR'
         OR SCREEN-NAME 'ZMARKETDISPOSE-BEGDA'
         OR SCREEN-NAME 'ZMARKETDISPOSE-ENDDA'
        OR SCREEN-NAME 'ZMARKETDISPOSE-ZPRICE'
        OR SCREEN-NAME 'ZMARKETDISPOSE-ZMEMBER'
        OR SCREEN-NAME 'ZMARKETDISPOSE-ZWAY'
        ).
        SCREEN-INPUT '1'.
        SCREEN-COLOR 00000000 .
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP  .
  ELSEIF  G_ZMAR_WA-UFLAG C_X.
    LOOP AT SCREEN.
      IF (   SCREEN-NAME 'ZMARKETDISPOSE-ZPRICE'
        ).
        SCREEN-INPUT '1'.

      ENDIF.
      MODIFY SCREEN.

    ENDLOOP  .
  ENDIF.
ENDMODULE.     


MODULE UPDATE INPUT.

 READ TABLE   G_ZMAR_ITAB  ASSIGNING  <FS1> INDEX  ZMAR-CURRENT_LINE.  "再PAI中 将table control 赋值给内表
 IF SY-SUBRC 0.
  <FS1>-ARTNR ZMARKETDISPOSE-ARTNR.
  <FS1>-BEGDA ZMARKETDISPOSE-BEGDA.
  <FS1>-ENDDA ZMARKETDISPOSE-ENDDA.
  <FS1>-ZPRICE ZMARKETDISPOSE-ZPRICE.
  <FS1>-ZMEMBER ZMARKETDISPOSE-ZMEMBER.
  <FS1>-ZWAY =  ZMARKETDISPOSE-ZWAY.
  <FS1>-ERNAM ZMARKETDISPOSE-ERNAM.
  <FS1>-CRDATU ZMARKETDISPOSE-CRDATU.
  <FS1>-UPNAM ZMARKETDISPOSE-UPNAM.
  <FS1>-UPDATU ZMARKETDISPOSE-UPDATU.
  <FS1>-MARK ZMARKETDISPOSE-MARK.
 ENDIF.



ENDMODULE.   


MODULE USER_COMMAND_0200 INPUT.

  CASE  OK_CODE .
    WHEN C_BACK.
      PERFORM  SUB_EXIT_SCREEN .
    WHEN C_ADD.
      PERFORM  ADD_ROW.
    WHEN  C_MODI .
      PERFORM MODI_ROW .
    WHEN C_SAVE .
      PERFORM SAVE_ROW.
    WHEN C_SORT_U.
      PERFORM SORT_U.
    WHEN C_SORT_D.
      PERFORM SORT_D.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.     



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值