转:ABAP:List中回写CheckBox的值到内表
转:ABAP:List中回写CheckBox的值到内表
我们在内表中定义了一个flag字段并以checkbox的方式显示在List上面后,该如何将用户的选项回写到内表中去?由于可能有Title、Column Heading以及TOP-OF-PAGE事件的存在,List上的行号无法直接对应到内表中的行号。通常我们的做法是根据List中某行的Key field value来判断其在内表中的对应记录。这里要介绍一个更好的办法,那就是直接将List行号与内表行号的差异直接记录下来。 REPORT z04_list_checkbox.
DATA: g_diff TYPE i,
g_line TYPE
i.
DATA: BEGIN OF itab OCCURS 0,
flag TYPE c,
data
TYPE char20,
END OF itab.
START-OF-SELECTION.
itab-data =
'Data 1'.
APPEND itab.
itab-data = 'Data 2'.
APPEND itab.
itab-data = 'Data 3'.
APPEND itab.
NEW-PAGE WITH-TITLE
WITH-HEADING.
LOOP AT itab.
WRITE: / itab-flag AS CHECKBOX,
itab-data.
ENDLOOP.
g_diff = sy-linno - LINES( itab ). "
步骤1
AT USER-COMMAND.
CASE sy-ucomm.
WHEN
'SAVE'.
LOOP AT itab.
g_line = sy-tabix +
g_diff. " 步骤2
READ LINE g_line FIELD VALUE
itab-flag.
MODIFY itab.
ENDLOOP.
BREAK-POINT.
WHEN OTHERS.
ENDCASE.
说明:(1)sy-linno和sy-colno是代表Write时候,当前List已经输出到了某行某列;
sy-curow和sy-cucol则代表USER-COMMAND事件中,用户用鼠标点中了List的哪个位置。(2)这里把g_diff赋值的语句放在了循环结束后。当然放循环内也是可以的,只是要多次运行。
如果放在循环开始前也不妥,计算的结果未必正确,因为系统是在首次碰到Write语句时触发TOP-OF-PAGE事件的。
FORM:http://hi.baidu.com/bhwang/item/31bc9200051acfea3599028e

浙公网安备 33010602011771号