繁体   English   中英

全屏时缺少 ALV Grid 工具栏

[英]ALV Grid toolbar is missing in fullscreen

我创建了一个简单的 ALV 网格并用数据填充了网格,现在网格显示在选择屏幕之后。 我没有使用自定义容器并全屏显示网格。

ALV 网格 object 的属性是否启用带有按钮filtersort等的工具栏,通常位于网格顶部?

到目前为止,这就是我所拥有的:

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( ).

每个 ALV function 在 Simple 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 object model 时,这首先令人困惑。 如果在全屏模式下使用 ALV,则必须在程序中引用 GUI 状态,并在网格实例上使用方法 SET_SCREEN_STATUS。 此处的 SAP 帮助中对此进行了说明。

它有助于将 function 组 SALV_METADATA_STATUS 中的 GUI 状态 SALV_TABLE_STANDARD 复制到您的报告中作为起点,然后您可以删除不需要的任何功能。 例如,如果您将状态作为 ALV_STATUS 复制到程序中,您将编写:

gr_alv->set_screen_status( report   = sy-repid
                           pfstatus = 'ALV_STATUS' ).

如果要使用基于类的 model 设置 ALV 功能,则必须将网格 object 嵌入屏幕中的自定义容器中。

似乎您需要做的是从网格 object 中获取 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 中显示 class 时单击文档按钮)。 后者准确地告诉你你需要做什么。

(另外,一点提示:将您的处理逻辑放在 try-catch 块中,因为如果初始化失败,您可能会捕获该异常,但 go 会尝试在未实例化或未初始化的类上调用方法)。

  • 将客户容器添加到您的 gui
  • 创建 class cl_gui_custom_container 的 object 并提供容器的名称
  • 创建 class cl_gui_alv_grid 的实例并提供自定义容器 object
  • 使用方法set_table_for_first_display

这将显示一个带有所有按钮的工具栏。 您可以使用 set_table_for_first_display 方法的 IT_TOOLBAR_EXCLUDING 参数来控制工具栏中需要哪些按钮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM