abap oo alv

OO ALV

1.相关类

CL_GUI_ALV_GRID

CL_GUI_CUSTOM_CONTAINER

CL_GUI_DOCKING_CONTAINER

CL_GUI_SPLITTER_CONTAINER

2.控制区域、容器、Grid关系

先在屏幕上绘制一个用户自定义控件区域,然后该用户以自定义控件区域为基础来创建CL_GUI_CUSTOM_CONTAINER容器实例,最后以此容器实例来创建CL_GUI_ALV_GRID实例

3.  CL_GUI_ALV_GRID重要方法

set_table_for_first_dispaly

REFRESH_TABLE_DISPLAY

IS_STABLE                                刷新的稳定性,就是滚动条保持不动

I_SOFT_REFRESH          软刷新,如果设置了这个参数,临时给ALV创建的合计、排序、数据过滤都将保持不变。这个是非常有意义的,例如:当你没有修改数据内表里的数据,但因布局修改了想刷新ALV时可使用

4.set_table_for_first_dispaly()方法重要参数

IS_VARIANT

I_SAVE

I_DEFAULT

IS_LAYOUT

IT_OUTTAB

IT_FIELDCATALOG

IT_SORT

5.  事件绑定、触发、回调处理

CLASS cl_event_handle DEFINITION"定义事件处理类
PUBLIC SECTION.
"ALV工具栏初始化事件,如增加按钮并设定属性
METHODS handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive.
"ALV工具栏按钮点击事件
METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
"ALV表格双击事件
METHODS handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column es_row_no.
ENDCLASS.

 

CLASS cl_event_handle IMPLEMENTATION."事件处理类实现部分
METHOD handle_toolbar.
    gs_toolbar-function 'B_SUM'."按钮的FunctionCode
    gs_toolbar-icon icon_display."按钮图标
    gs_toolbar-text '总行数'."按钮标签
    gs_toolbar-butn_type '0'."定义按钮类型,0为标准按钮
APPEND gs_toolbar TO e_object->mt_toolbar."添加按钮到工具栏中
ENDMETHOD.

  METHOD handle_user_command.
DATAsum TYPE i .
IF e_ucomm 'B_SUM'.
...
ENDIF.
ENDMETHOD.
METHOD  handle_double_click.
....
ENDMETHOD.
ENDCLASS.

CREATE OBJECT container_r EXPORTING container_name 'CONTAINER_1'."创建ALV容器对象
CREATE OBJECT grid_r EXPORTING i_parent container_r. "创建ALV控件
CALL METHOD grid_r->set_table_for_first_displayCHANGING it_outtab gt_sflight[].

SET HANDLER :event_handle->handle_toolbar FOR grid_r, "注册处理器

event_handle->handle_user_command FOR grid_r,
      event_handle->handle_double_click FOR grid_r.

CALL METHOD grid_r->set_toolbar_interactive. "调用此方法才能激活工具栏上增加的自定义按钮

6.  CL_GUI_DOCKING_CONTAINER容器

Docking容器最大特点是在代码中可以动态创建容器,不需要像创建自定义容器CL_GUI_CUSTOM_CONTAINER那样,在创建时需要将其绑定到一个预先绘制好的用户自定义控件区域中

7.覆盖(拦截)预设按钮的功能FunCode:BEFORE_USER_COMMAND

before_user_command事件中截取标准的功能,完成其他功能,然后使用方法set_user_command将功能代码修改为空(如何拦截事件,则参考事件绑定、触发、回调处理章节)

FORM handle_before_user_command USING i_ucomm TYPE syucomm .
CASE e_ucomm .
WHEN '&INFO' .
CALL FUNCTION 'ZSFLIGHT_PROG_INFO'.
CALL METHOD gr_alvgrid->set_user_commandEXPORTING i_ucomm space.
ENDCASE .
ENDFORM .

8.  数据改变事件data_changed、data_changed_finished

Alv grid有两个事件:data_changed和ata_changed_finished.第一个事件在可编辑字段的数据发生变化时触发,可用来检查数据的输入正确性,第二个事件是当数据修改完成后触发

如果数据没有被修改,当失去焦点或回车时,那么它不会走data change,而是直接触发data change finish事件

可以通过CL_GUI_ALV_GRID类的REGISTER_EDIT_EVENT方法来设置在失去焦点回车时,触发数据改变事件:

²按回车触发: i_event_id = cl_gui_alv_grid=>mc_event_enter

²单元格失去焦点: i_event_id = cl_gui_alv_grid=>mc_event_modifies

必须设置一种方式,要不然数据变化事件不会被触发事件

然后注册CL_GUI_ALV_GRID的data_changed、data_changed_finished事件,实现事件处理器方法,在数据发生改变时就会触发这两上事件

9.单元格可编辑

与非OO ALV是一样的,请参照

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值