lvc_alv 实现 checkbox 多选的功能 g_grid->check_changed_data

   不知道同志们 有没有遇到在做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







你可能感兴趣的:(sap_abap,lvc_alv)