现在的位置: 首页 > 综合 > 正文

table control初步探讨

2013年10月29日 ⁄ 综合 ⁄ 共 4018字 ⁄ 字号 评论关闭

一般在屏幕中制作了table control要做以下动作:

既然要使用table control当然要用到内表,所以首先要在主程序中声明control和内表.

完了要设置control的lines属性,这个一般是根据内表的最大行来确定

对于屏幕逻辑流:

PBO中要loop control, 用一个module去将内表数据逐行填充的table control的显示区域里面

PAI中也要loop control,此时用一个module去将内表数据进行更新

废话不多说,以下我开发一个程序用来显示航班信息:

 

主程序:

*====================================================================

*&---------------------------------------------------------------------*
*& Report ztest_pillar                                                 *
*&---------------------------------------------------------------------*

REPORT ztest_pillar.

*Data declaration------------------------------------------------------*
TABLES: demo_conn, spfli.
DATA itab TYPE STANDARD TABLE OF demo_conn.
DATA fill TYPE i."定义一个变量来存储内表的行数
DATA ok_save TYPE sy-ucomm.
DATA ok_code TYPE sy-ucomm.
DATA limit TYPE i."该变量用来控制跳行
CONTROLS tc_sflight TYPE TABLEVIEW USING SCREEN 100."定义table control容器

*Event block-----------------------------------------------------------*

*start-of-selection event
start-of-selection.
SELECT FROM spfli INTO CORRESPONDING FIELDS OF TABLE itab."得到内表数据
CALL SCREEN 100.

*Modules block---------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
*  SET PF-STATUS 'xxxxxxxx'.
*  SET TITLEBAR 'xxx'.
  DESCRIBE TABLE itab LINES fill."取得内表行数
  tc_sflight-lines = fill."设置table control的top_line最大值的
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  CANCEL  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.                 " CANCEL  INPUT
*&---------------------------------------------------------------------*
*&      Module  FILL_TC  OUTPUT
*&---------------------------------------------------------------------*
*       将内表数据逐行读到table control中去
*----------------------------------------------------------------------*
MODULE fill_tc OUTPUT.
  READ TABLE itab INTO demo_conn INDEX tc_sflight-current_line.
ENDMODULE.                 " FILL_TC  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  UPDATE_TC  INPUT
*&---------------------------------------------------------------------*
*       更新table control记录
*----------------------------------------------------------------------*
MODULE update_tc INPUT.
  MODIFY itab FROM demo_conn INDEX tc_sflight-current_line.
  ok_save = ok_code.
  CLEAR ok_code.
  CASE ok_save.
*将头行上移
    WHEN 'PREV_LINE'.
      tc_sflight-top_line = tc_sflight-top_line - 1.
      IF tc_sflight-top_line < 1.
        tc_sflight-top_line = 1.
      ENDIF.
*显示前一页数据
    WHEN 'PREV_PAGE'.
      tc_sflight-top_line = tc_sflight-top_line - sy-loopc.
      IF tc_sflight-top_line < 1.
        tc_sflight-top_line = 1.
      ENDIF.
*显示首页数据
    WHEN 'FIRST_PAGE'.
      tc_sflight-top_line = 1.
*将投行下移一行
    WHEN 'NEXT_LINE'.
      tc_sflight-top_line = tc_sflight-top_line + 1.
      IF tc_sflight-top_line > fill.
        tc_sflight-top_line = fill.
      ENDIF.
*显示后一页数据
    WHEN 'NEXT_PAGE'.
      tc_sflight-top_line = tc_sflight-top_line + sy-loopc.
      IF tc_sflight-top_line > fill.
        tc_sflight-top_line = fill.
      ENDIF.
*显示最后一页数据
    WHEN 'LAST_PAGE'.
      tc_sflight-top_line = fill.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.                 " UPDATE_TC  INPUT

 

 

*==================================================================================

 

屏幕逻辑流

 

*==================================================================================

 

PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  LOOP WITH CONTROL tc_sflight.
    MODULE fill_tc.
  ENDLOOP.
PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.
  LOOP WITH CONTROL tc_sflight.
    MODULE update_tc.
  ENDLOOP.

抱歉!评论已关闭.