我可以在列表报告中显示复选框,单击也可以。
我还可以使用AT LINE-SELECTION事件读取列表的当前行。
有人可以帮忙吗?
问题是单击复选框后,复选框图标没有更新。我试图找到解决方案,并试图修复自己,但无法解决问题。
示例代码如下。
TYPE-POOLS:icon.
CONSTANTS:
c_unchecked TYPE icon_d VALUE icon_wd_iframe,
c_checked TYPE icon_d VALUE icon_checkbox.
TYPES: BEGIN OF ty_data,
carrid TYPE s_carr_id,
carrname TYPE s_carrname,
currcode TYPE s_currcode,
url TYPE s_carrurl ,
checkbox TYPE icon_d,
END OF ty_data.
DATA t_data TYPE STANDARD TABLE OF ty_data.
START-OF-SELECTION.
SELECT CARRID,CARRNAME,CURRCODE,URL FROM SCARR INTO TABLE @t_data.
LOOP AT t_data ASSIGNING FIELD-SYMBOL(<fs_data>).
<fs_data>-checkbox = c_unchecked .
WRITE:/10 <fs_data>-checkbox AS ICON HOTSPOT,
20 <fs_data>-carrid,
35 <fs_data>-carrname,
60 <fs_data>-currcode,
70 <fs_data>-url.
ENDLOOP.
AT LINE-SELECTION.
READ TABLE t_data ASSIGNING <fs_data>
INDEX sy-curow.
IF sy-subrc EQ 0.
IF <fs_data>-checkbox EQ c_unchecked.
<fs_data>-checkbox = c_checked.
REPLACE ALL OCCURRENCES OF c_unchecked IN sy-lisel WITH c_checked.
ELSEIF <fs_data>-checkbox EQ c_checked.
REPLACE ALL OCCURRENCES OF c_checked IN sy-lisel WITH c_unchecked.
ENDIF.
MODIFY LINE sy-curow.
ENDIF.
输出:
答案 0 :(得分:1)
将AS ICON HOTSPOT
更改为AS CHECKBOX
应该可以解决您的问题。
答案 1 :(得分:1)
我的答案是对@Jagger正确答案的补充,但是stackoverflow不允许添加大注释。
使用AS CHECKBOX
是最佳答案,因为如果您只需要一个复选框,则无需使用图标。
这里是完整的代码,显示AS CHECKBOX
的工作方式,包括如何找出已选择的行(显示第二行ABAP列表并显示选定的行)。在ABAP列表中使用全局变量(而不是字段符号)很重要,因为这是一种过时的技术,只能通过全局变量访问字段。
TYPES: BEGIN OF ty_data,
carrid TYPE s_carr_id,
carrname TYPE s_carrname,
currcode TYPE s_currcode,
url TYPE s_carrurl,
checkbox TYPE abap_bool,
END OF ty_data.
DATA t_data TYPE STANDARD TABLE OF ty_data.
START-OF-SELECTION.
SELECT carrid,carrname,currcode,url FROM scarr INTO TABLE @t_data.
SKIP 1.
WRITE / '@15\Qtooltip@Execute' HOTSPOT.
SKIP 1.
LOOP AT t_data INTO DATA(fs_data).
fs_data-checkbox = abap_false.
WRITE:/10 fs_data-checkbox AS CHECKBOX,
20 fs_data-carrid,
35 fs_data-carrname,
60 fs_data-currcode,
70 fs_data-url.
ENDLOOP.
AT LINE-SELECTION.
IF sy-lisel = '@15\Qtooltip@Execute'.
write / 'You have selected these lines:'.
DATA lines TYPE i.
DESCRIBE LIST NUMBER OF LINES lines.
DO lines TIMES.
READ LINE sy-index FIELD VALUE fs_data-checkbox.
IF fs_data-checkbox = 'X'.
WRITE / sy-lisel.
ENDIF.
ENDDO.
ENDIF.
结果: