我创建了一个简单的ALV网格,并用数据填充网格,现在网格显示在选择屏幕之后。我没有使用自定义容器,也没有全屏显示网格。
ALV网格对象是否有一个属性可以启用带有按钮筛选、排序等的工具栏,该属性通常位于网格顶部?
到目前为止,这就是我所拥有的:
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = gr_alv
CHANGING
t_table = tbl_data
).
CATCH cx_salv_msg.
ENDTRY.
* initialize the alv settings - nothing done here for the moment.
PERFORM define_settings USING gr_alv.
* Display the ALV
gr_alv->display( ).
在Simple ALV中,每个ALV函数都被实现为一个单独的class,因此您必须分别处理它们。您不需要自定义控件。
为了添加工具栏:
data: lr_func TYPE REF TO CL_SALV_FUNCTIONS_LIST.
"Functions
lr_func = gr_alv->get_functions( ).
lr_func->set_all( ).
完整ALV显示:
form display_results.
data: ls_key type salv_s_layout_key,
lo_table type ref to cl_salv_table,
lo_cols type ref to cl_salv_columns_table,
lo_events type ref to cl_salv_events_table,
lo_funcs type ref to cl_salv_functions_list,
lo_layout type ref to cl_salv_layout,
lo_display type ref to cl_salv_display_settings,
lo_selections type ref to cl_salv_selections.
try.
call method cl_salv_table=>factory
exporting
list_display = abap_false
importing
r_salv_table = lo_table
changing
t_table = gt_list.
catch cx_salv_msg . "#EC NO_HANDLER
endtry.
"Events
create object go_events.
lo_events = lo_table->get_event( ).
set handler go_events->double_click for lo_events.
"Layouts
ls_key-report = sy-repid.
lo_layout = lo_table->get_layout( ).
lo_layout->set_key( ls_key ).
lo_layout->set_default( abap_true ).
lo_layout->set_save_restriction( ).
lo_layout->set_initial_layout( p_var ).
lo_cols = lo_table->get_columns( ).
perform change_columns changing lo_cols.
"Functions
lo_funcs = lo_table->get_functions( ).
lo_funcs->set_all( ).
"Display Settings
lo_display = lo_table->get_display_settings( ).
lo_display->set_striped_pattern( abap_true ).
"Selections
lo_selections = lo_table->get_selections( ).
lo_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
lo_table->display( ).
endform. " DISPLAY_RESULTS
当您使用ALV对象模型时,这首先会让人感到困惑。如果在全屏模式下使用ALV,则必须在程序中引用GUI状态,并在网格实例上使用方法SET_SCREEN_status。SAP帮助中对此进行了说明。
它有助于将GUI状态SALV_TABLE_STANDARD从函数组SALV_METADATA_status复制到您的报告中作为起点,然后您可以删除任何不需要的函数。例如,如果您将状态作为ALV_status复制到程序中,您将编写:
gr_alv->set_screen_status( report = sy-repid
pfstatus = 'ALV_STATUS' ).
如果要使用基于类的模型来设置ALV函数,则必须将网格对象嵌入屏幕中的自定义容器中。
似乎您需要做的是从网格对象中获取CL_SALV_FUNCTIONS_LIST的实例,如下所示:
data: lr_func TYPE REF TO CL_SALV_FUNCTIONS_LIST.
lr_func = gr_alv->get_functions( ).
lr_func->set_all( ).
但是,从那以后,你似乎需要做一点或工作。我的建议是:查看CL_SALV_TABLE和CL_SALV-FUNCTIONS_LIST类的文档(也就是说,在事务SE24中显示该类时单击文档按钮(。后者告诉你需要做什么
(还有一点提示:将处理逻辑放入try-catch块中,因为如果初始化失败,您可能会捕获该异常,但继续尝试调用未实例化或未初始化类上的方法(。
- 将客户容器添加到gui
- 创建clgui自定义容器类的对象,并提供容器的名称
- 创建类clgui lvgrid的实例并提供自定义容器对象
- 使用方法set_table_for_first_display
这将显示一个包含所有按钮的工具栏。可以使用set_table_for_first_display方法的IT_toolbar_EXCLUDING参数来控制工具栏中需要的按钮。