转: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

posted @ 2013-03-12 15:46  VerySky  阅读(1131)  评论(0)    收藏  举报