如果想删除OOALV工具栏可以用如下方法
vseoattrib表是存储类属性的表
FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
* 删除所有的OOALV 状态栏
DATA:BEGIN OF lt_exclude OCCURS 0,
attvalue TYPE vseoattrib-attvalue,
END OF lt_exclude.
FIELD-SYMBOLS:<exclude> LIKE lt_exclude.
DATA:len TYPE i.
SELECT attvalue INTO TABLE lt_exclude FROM vseoattrib
WHERE clsname = 'CL_GUI_ALV_GRID'
AND type = 'UI_FUNC'.
LOOP AT lt_exclude ASSIGNING <exclude>.
CLEAR len.
len = STRLEN( <exclude>-attvalue ).
IF len > 0.
len = len - 2.
<exclude>-attvalue = <exclude>-attvalue+1(len).
APPEND <exclude>-attvalue TO pt_exclude.
ENDIF.
ENDLOOP.
ENDFORM.
光标定位的方法
FORM set_current USING p_index p_fieldname p_row_id.
DATA : wl_is_row_id TYPE lvc_s_row,
wl_is_column_id TYPE lvc_s_col,
wl_is_row_no TYPE lvc_s_roid.
wl_is_row_id-index = p_index.
wl_is_column_id-fieldname = p_fieldname.
wl_is_row_no-row_id = p_row_id.
CALL METHOD g_grid->set_current_cell_via_id
EXPORTING
is_row_id = wl_is_row_id " Row No
is_column_id = wl_is_column_id " Column No
is_row_no = wl_is_row_no. " Row No.
ENDFORM. "set_current
强制触发DATA_CHANGED事件,并根据OOALV屏幕数据修改内表
在PAI 中调用下面的方法
* 将已经触发的EVENT发送给他们各自的EVENT HANDLER,以便让这些事件得到响应。 为check_changed_data做准备
CALL METHOD cl_gui_cfw=>dispatch.
* 可以触发mc_evt_modified
CALL METHOD g_grid->check_changed_data.
在PBO中定义下面方法
疑点:经过测试,发现不用失去焦点的方式,也能在上面情况下强制触发data_chagnde事件。
* 回车事件
CALL METHOD g_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
* 失去焦点
* CALL METHOD g_grid->register_edit_event
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_modified.
* OOALV修改的数据返回内表
CALL METHOD g_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
使程序重新走PBO
"handle_data_changed
METHOD handle_after_user_command.
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'REFRESH'.
* 使程序重新走PBO
CALL METHOD cl_gui_cfw=>flush.
ENDMETHOD.