SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑。
简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通屏幕元素的区别。
如果我们对一个Table Control定义其内表为itab,工作区域为wa。那么在PBO中,系统将逐一取itab的某行到wa,然后将wa的内容转换成屏幕元素,即Table Control的一行,如此反复。
换句话说,Table Control的每一行是跟wa交互的,与itab没有直接的关联。
反过来在PAI中,系统将根据Table Control的录入情况,逐行取数据到wa(前提是该行的内容不为空),然后我们即可根据wa的内容往itab修改或添加一行记录。

1. 如何设置TC的行数
如果我们定义了TC的名称为tc_0100,则TC向导将生成如下一行代码:
    CONTROLS: tc_0100 TYPE TABLEVIEW USING SCREEN 0100.
调试可知,tc_0100是个Deep Structure,拥有很多属性,它实现了对表格控件的所有属性的封装。
这里我们先介绍属性:lines。lines代表该表控件一共有多少行可供用户查看或输入。
如果是查看状态,则一般可为其赋值LINES( itab )。如果是编辑状态,为了允许用户添加条目,则必须大于itab的行数。
而如果TC的该属性小于内表行数呢?则只有内表中的前面几行可以显示,后面的内容将不会出现在SCREEN中,当然实际中我们不会这么操作。

2. 如何设置TC中某单元格编辑与否
对于普通的屏幕元素,我们都很清楚,用LOOP AT SCREEN可以实现。对于TC,当然也是一样的。
TC向导会生成如下的Screen Flow Logic:
  LOOP AT itab INTO wa WITH CONTROL tc_0100 CURSOR tc_0100-current_line.
    MODULE tc_0100_change_field_attr.
  ENDLOOP.
这是什么意思呢?事实上,如果我们设置了tc_0100-lines = 50,那么该Module将被执行50次。
所以,只要在tc_0100_change_field_attr中添加LOOP AT SCREEN即可,如下:

MODULE tc_0100_change_field_attr OUTPUT.
  LOOP AT SCREEN.
    CASE screen-name.
      WHEN ‘ITAB-KEYFELD’.
        IF tc_0100-current_line > db_num.
          screen-input = ‘1′.
        ELSE.
          screen-input = ‘0′.
        ENDIF.
      WHEN OTHERS.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.
ENDMODULE.

3. 如何更新我们内表的数据
上面已经说过,在PAI处理过程中,系统将根据逐行读取TC的数据,填充到wa中,而我们的itab与屏幕元素其实没有直接的关联,所以简单而言,可以如下编写代码:
  MODULE tc_0100_modify INPUT.
    IF tc_0100-current_line <= LINES( itab ).
      MODIFY itab FROM wa INDEX tc_0100-current_line.
    ELSE.
      APPEND wa TO itab.
    ENDIF.
  ENDMODULE.

前面说过,如果tc_0100-lines = 50,那么Module tc_0100_change_field_attr将被执行50次。
那么这里的Module tc_0100_modify 是不是也是50次呢?答案是<=50次,这是因为,如果TC中某行完全为空的话,系统是不可能调用tc_0100_modify的,换句话说,此时TC中的该行将视同不存在。

4,滚动到某行某列
如果我们希望,屏幕显示后展示在用户面前的最上端或者左端是表内容中的某行某列,则应该修改变量top_line和left_col的值。一般可在PBO的tc_0100_change_tc_attr里设置:
tc_0100-top_line = 3.
tc_0100-left_col = 3.
后面left_col语句起作用的前提是,内表的字段较多,导致表控件宽度不够,确有左右滚动的必要。

5,获取鼠标所在位置
这里要用GET CURSOR语句,比如
DATA: l_line TYPE i,
      l_field TYPE screen-name.
GET CURSOR FIELD l_field LINE l_line.

这样就取得了鼠标在内表的所在行以及字段名。不过要注意的是,如果希望映射到itab,那可别忘了top_line。正确读取鼠标所在条目对应于内表哪行数据的语句是:
GET CURSOR LINE l_line.
l_line = l_line + tc_0100-top_line - 1.
READ TABLE itab INTO wa INDEX l_line.
与此类似,希望鼠标定位于内表中某单元格的语句是SET CURSOR FIELD l_field LINE l_line.

6,设置固定列,设置行选择
有时我们希望Table Control的左边几列(一般是关键字段),它们在屏幕上是固定的,可以方便用户的阅读。要怎么设置呢?首先我们肯定会想到字段的属性中去找,可惜没找到。
其实这是Table Control本身的一个属性,我们只能定义最左边的某些列不可滚动。在Screen Layout中,双击Table Control的右上角,弹出“表控制”属性,即可设置:

这里也可以看到我们对表控件的行选择进行了设置,允许多重选择,同时选中与否的信息将更新到wa的mark字段,mark一般定义成c(1)。

7,如何隐藏某列
隐藏屏幕字段,我们首先想到的肯定是LOOP AT SCREEN,设置ACTIVE或INVISIBLE的字段值。可惜测试后,发现行不通。正确的做法是,通过编程修改tabctrl-cols下的某字段可见长度。

DATA: l_hide TYPE c,
      ls_col LIKE LINE OF tc_0100-cols.
LOOP AT tc_0100-cols INTO ls_col WHERE screen-name = ‘WA-FIELD2′.
  IF l_hide IS INITIAL.
    ls_col-vislength = 6.
  ELSE.
    ls_col-vislength = 0.
  ENDIF.
  MODIFY tc_0100-cols FROM ls_col.
ENDLOOP.

abap table control里面各种属性和事件的写法相关推荐

  1. abap table control控制光标

    定义全局变量   DATA:g_cursor_cur_line TYPE  i.   PBO中代码 SET CURSOR FIELD '想要跳转的字段名' LINE G_CURSOR_CUR_LINE ...

  2. SAP ABAP table control中用帮助(F4)实现自动填充另一字段教程

    最近在和一个朋友的交流中,遇到了这么一个需求,就是在TC中对一个字段实现帮助,然后从帮助选择值时能把文本带到TC中的文本字段中,原来没做过这种实现,只是做过回车后,通过CHAIN中的MODULE实现把 ...

  3. ABAP 的TABLE CONTROL实践积累

    TABLE CONTROL 是一个结构, 假设我们定义的TC名称为  ZTEST_TC (具体结构参照:SCXTAB_CONTROL) 那么我们定义ZTEST_TC-CURENT_LINE ,ZTES ...

  4. ABAP:为Table Control创建Context Menu

    1,创建一个GUI Status 在SE80中点击程序名,并点击右键的创建,找到GUI Status. 它与普通菜单栏的定义没什么不同,但是Status Type必须选择Context Menu,假设 ...

  5. ABAP中的Table Control编程

    SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通屏 ...

  6. abap 在table control(表控件) 实现查找功能

    我们都知道ALV控件已经集成了查找功能 ,这对于在海量数据中查找某条数据是非常方便的,而 table control (表控件)没有提供这样的功能,那只能通过手工的方式在屏幕添加一个这样的功能,方便对 ...

  7. abap-在table control中实现查找功能

    table control 创建时可以实现添加,删除,及翻页的功能,但没有查找的功能,故记录多时查看不方便,所以要自己写,DEBUG标准ALV的查找功能发现使用函数ALV_POPUP_TO_SEARC ...

  8. 对话屏幕Dynpro(SE51) 屏幕元素 屏幕属性 PAI事件的触发、屏幕元素Function Code设置 屏幕流逻辑Screen Flow Logic 对话屏幕中的字段命名大小写问题

    对话屏幕Dynpro(SE51) 屏幕元素 屏幕属性 l  屏幕序号(Screen number).四个数字组成的序列号,用于在程序中确定屏幕,该序号在同一个ABAP程序内部是唯一的. l  屏幕类型 ...

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

    本实例仿照SAP DEMO而写 DEMO名称是:demo_dynpro_tabcont_loop_at,自动动手写一次的目的是把将该程序的注释写明白一点,希望本文对刚入门的博友在理解table con ...

最新文章

  1. HDU 4768 Flyer(二分法)
  2. 20180611-20180615
  3. 阿里云上创建个人网站
  4. Win8下右键“发送到”没有蓝牙选项的解决办法
  5. 1使用技巧_新版PubMed使用技巧1
  6. Linux服务之httpd基本配置详解
  7. 重磅汇总!2015-2019学硕国家线走势情况!
  8. 电脑显示服务器负载信息失败,线上服务mcelog负载异常分析处理流程
  9. mysql jdbc 表结构_JDBC操作表:JDBC修改表结构
  10. 蒂森电梯服务器显示4480,成都电梯豪宅市场分析专题报告.docx
  11. 简单选择排序_一文带你读懂排序算法(一):冒泡 amp; 快速选择排序 amp; 简单插入排序算法...
  12. [BZOJ 1070] [SCOI2007] 修车
  13. DanmuManager 一个简单的弹幕工具
  14. ManyCam Enterprise(摄像头特效软件)v6.7.0.34版
  15. prometheus grafana sql 常用函数参数
  16. 大气颗粒物 PMF 源解析
  17. 查询学生的学号、课程号和成绩,并按成绩升序排序
  18. plc中int数据类型范围_PLC数据类型INT 和WORD的区别点-工业支持中心-西门子中国...
  19. 【Qt入门第23篇】 数据库(三)利用QSqlQuery类执行SQL语句
  20. 02—测试用例内容包含、测试用例的设计点

热门文章

  1. 腾讯CDC-审批流设计指南
  2. 从业务视角看交互设计师的价值
  3. 周源:知乎的未来是什么
  4. 语音助手们——功能未动,趣味先行
  5. 【软件安装】sublime安装方法
  6. 金蝶K/3 同步用核算项目配置
  7. 《从Paxos到ZooKeeper 分布式一致性原理与实践》读书笔记
  8. 浅析Unity中的Enlighten与混合光照
  9. I00040 计算1000以内的勾股数
  10. Ubuntu安装VMware Tools的方法