Abap 在列表报告中单击时,图标“未选中框”未更改为“已选中”
我可以在列表报告中显示复选框,单击也可以 我还能够使用AT行选择事件读取列表的当前行 有人能帮忙吗 问题是单击复选框时复选框图标未更新。我试图找到解决方案,并尝试自行修复,但未能完成 下面是示例代码Abap 在列表报告中单击时,图标“未选中框”未更改为“已选中”,abap,Abap,我可以在列表报告中显示复选框,单击也可以 我还能够使用AT行选择事件读取列表的当前行 有人能帮忙吗 问题是单击复选框时复选框图标未更新。我试图找到解决方案,并尝试自行修复,但未能完成 下面是示例代码 TYPE-POOLS:icon. CONSTANTS: c_unchecked TYPE icon_d VALUE icon_wd_iframe, c_checked TYPE icon_d VALUE icon_checkbox. TYPES: BEG
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.
输出:
将“作为图标热点”更改为“作为复选框”应该可以解决您的问题。我的答案更多地是对@Jagger correct answer的补充,但stackoverflow不允许添加大评论 使用AS复选框是最好的答案,因为如果您只需要一个复选框,就没有理由使用图标 下面是一个完整的代码,它显示了AS复选框的工作原理,包括如何找出已选择的行。将显示带有选定行的辅助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.
结果:
桑德拉·罗西。我的原始要求不同,我必须显示如果选择了一个供应商,那么其他供应商将显示十字。对于复选框,您的答案可能是正确的,但我的要求是图标。@Nasir我知道,我的答案与您关于图标的问题不符,但您的问题中存在歧义,这使我认为复选框需要图标。您仍然可以使用一个真正的复选框,只需在输入时添加热点,然后关闭复选框,复选框也会变灰,但鼠标仍然显示它可能被单击。无论如何,我知道你的问题对任何类型的图标都是有效的,而不仅仅是复选框式图标,因此图标解决方案将帮助有相同问题的人PS:我已经在问题标题中添加了图标,以便可以搜索。