ALV双击复选框,把编号相同的数据都选上

1、直接写程序,但是这种方式只能用于双击事件
when '&IC1'.
if rs_selfield-fieldname = 'SEL'.
perform frm_check_box using rs_selfield.
endif.

form frm_check_box  using ps_selfield  type slis_selfield.
read table gt_alv into gs_alv index ps_selfield-tabindex.
check sy-subrc = 0.

loop at gt_alv assigning field-symbol(<fs_alv>) where vbeln = gs_alv-vbeln.
if <fs_alv>-sel = 'X'.
clear <fs_alv>-sel.  "如果最开始是选中了那个数据,那么要先取消选中,然后双击再把编号相同的数据都勾选上
else.
<fs_alv>-sel = 'X'.
endif.
endloop.
endform.

在这里插入图片描述
在这里插入图片描述

2、利用事件的方法来实现(这种既可以单击也可以双击)
*&---------------------------------------------------------------------*
*& 包含               ZSDF036_C01
*&---------------------------------------------------------------------*
class     cl_event_receiver definition.
public section.
methods:
handle_data_changed
for event data_changed of cl_gui_alv_grid
importing er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.


endclass. "cl_event_receiver DEFINITION


data:g_alv_grid          type ref to cl_gui_alv_grid,
g_cl_event_receiver type ref to cl_event_receiver.


*----------------------------------------------------------------------*
*       CLASS cl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
* 注册事件类
*----------------------------------------------------------------------*
class cl_event_receiver implementation.
" 数据变更事件
method handle_data_changed.
perform frm_data_changed using er_data_changed.
endmethod.                    "HANDLE_DATA_CHANGED


endclass. "cl_event_receiver IMPLEMENTATION

*&---------------------------------------------------------------------*
*& Form frm_data_changed
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> ER_DATA_CHANGED
*&---------------------------------------------------------------------*
form frm_data_changed   using p_er_data_changed
type ref to cl_alv_changed_data_protocol.

data: lt_modi type lvc_t_modi,
lw_modi type lvc_s_modi.

MOVE p_er_data_changed->mt_mod_cells TO lt_modi.

loop at lt_modi into lw_modi.
read table gt_data assigning field-symbol(<fs_alv>) index lw_modi-row_id.

if sy-subrc eq 0.
case lw_modi-fieldname.
when 'CHBOX'.
loop at gt_data assigning field-symbol(<fs_alv_c>) where vbeln = <fs_alv>-vbeln.
if <fs_alv_c>-chbox is initial.
<fs_alv_c>-chbox = 'X'.
else.
<fs_alv_c>-chbox = ''.
endif.
endloop.
when others.
endcase.
endif.
endloop.

perform frm_alv_refresh.
endform.

*&---------------------------------------------------------------------*
*& Form frm_alv_refresh
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
form frm_alv_refresh .

data: ls_stable type lvc_s_stbl.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
call method g_alv_grid->refresh_table_display
exporting
is_stable = ls_stable
*     i_soft_refresh = 'X'
exceptions
finished  = 1
others    = 2.
if sy-subrc <> 0.
*     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.


endform.

然后再调用ALV显示函数之前需要加上事件:

 gs_events-name = 'CALLER_EXIT'.
gs_events-form = 'REGISTER_EVENTS'.
APPEND gs_events TO gt_events.

在这里插入图片描述
注册事件的代码:

*&---------------------------------------------------------------------*
*&      Form  register_events
*&---------------------------------------------------------------------*
*       注册事件,包括回车及光标定位
*----------------------------------------------------------------------*
form register_events using fu_grid type slis_data_caller_exit.

call function 'GET_GLOBALS_FROM_SLVC_FULLSCR'
importing
e_grid = g_alv_grid.

call method g_alv_grid->register_edit_event
exporting
i_event_id = cl_gui_alv_grid=>mc_evt_enter
*    EXCEPTIONS
*     error      = 1
*     others     = 2
.
if sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.

call method g_alv_grid->register_edit_event
exporting
i_event_id = cl_gui_alv_grid=>mc_evt_modified
*    EXCEPTIONS
*     error      = 1
*     others     = 2
.
if sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.

create object g_cl_event_receiver.
*  SET HANDLER g_cl_event_receiver->handle_modify FOR g_alv_grid.
set handler g_cl_event_receiver->handle_data_changed for g_alv_grid.
*  SET HANDLER g_cl_event_receiver->handle_double_click FOR g_alv_grid."双击
*  SET HANDLER g_cl_event_receiver->handle_hotspot_click FOR g_alv_grid."单击
endform. "register_events
**最后在调用ALV显示的那个函数里面一定要加上这一句话**
it_events                = gt_events

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值