ABAP TBL鼠标滚动到某行某列
如果我們希望,屏幕顯示后展示在用戶面前的最上端或者左端是表內容中的某行某列,則應該修改變量top_line和left_col的值。一般可在PBO的tc_0100_change_tc_attr里設置:
tc_0100-top_line = 3.
tc_0100-left_col = 3.
后面left_col語句起作用的前提是,內表的字段較多,導致表控件寬度不夠,確有左右滾動的必要。
獲取鼠標所在位置
這里要用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.
.如何設置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.
如何更新我們內表的數據
上面已經說過,在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中某行完全為空的話,
總結
以上是生活随笔為你收集整理的ABAP TBL鼠标滚动到某行某列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ABAP TBL隐藏列
- 下一篇: SMW0上传文件到数据库层详解