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

时间:2019-02-05 13:27:10

标签: sap abap

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

我还可以使用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.

输出:

Listoutput with checkbox

2 个答案:

答案 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.

结果:

ABAP list with checkbox