Abap 在列表报告中单击时,图标“未选中框”未更改为“已选中”

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

我可以在列表报告中显示复选框,单击也可以

我还能够使用AT行选择事件读取列表的当前行

有人能帮忙吗

问题是单击复选框时复选框图标未更新。我试图找到解决方案,并尝试自行修复,但未能完成

下面是示例代码

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:我已经在问题标题中添加了图标,以便可以搜索。