不知道同志们 有没有遇到在做alv报表时,会让某列出力为'checkbox', 并且要能达到:通过鼠标左键选择打勾,并且能多选,这样的功能需求。
一般情况下通过call:REUSE_ALV_GRID_DISPLAY实现ALV报表,但是这种方式出力的话,对多个‘checkbox’勾选时,在"I_CALLBACK_USER_COMMAND" form 中始终只能修改最后勾选的那个checkbox,如果双击一下,就能全部选中。并且修改内表值。
解决方法:是OO的ALV(lvc_alv)
通过自己创建一个屏幕,并画一个容器( alv_container ),然后定义以下对象:
cl_grid type ref to cl_gui_alv_grid.
cl_customer type ref to cl_gui_custom_container.
一下代码实现实例化:
create object cl_customer
exporting container_name = container(alv_container,创建的容器).
create object cl_grid
exporting i_parent = cl_customer.
然后设置相应的参数,
call method cl_grid->set_table_for_first_display
exporting is_layout = .....
it_toolbar_excluding = .....
.....
changing it_fieldcatalog = .....
it_outtab = .....
......。
call method cl_grid->set_ready_for_input
exporting
i_ready_for_input = 1 .
(该方法是:实现alv中可编辑的字段可见进行编辑).
最后在相应的事件里通过调用:
call method cl_grid->check_changed_data
importing e_valid = l_valid.
(该方法:就是获取画面数据改变的事件,并把相应的数据修改到内表)
以下附一个test图:通过勾选checkbox,可以直接到达多选的功能。
详细的代码实现可参考abap(SE38)中的示例程序:BCALV_EDIT_05