首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全屏中缺少ALV网格工具栏

全屏中缺少ALV网格工具栏
EN

Stack Overflow用户
提问于 2011-07-04 18:58:02
回答 4查看 13.9K关注 0票数 6

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

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

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

代码语言:javascript
复制
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( ).
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-04 20:55:05

每个ALV函数都是在简单ALV中作为一个单独的类实现的,因此您必须分别处理它们。您不需要自定义控件。

为了添加工具栏:

代码语言:javascript
复制
data: lr_func TYPE REF TO CL_SALV_FUNCTIONS_LIST.
"Functions
lr_func = gr_alv->get_functions( ).
lr_func->set_all( ).

完整的ALV显示:

代码语言:javascript
复制
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
票数 8
EN

Stack Overflow用户

发布于 2011-07-05 12:17:29

当您首先使用ALV对象模型时,这是令人困惑的。如果在全屏模式下使用ALV,则必须在程序中引用GUI状态,并在网格实例上使用SET_SCREEN_STATUS方法。在SAP 这里中对此进行了解释。

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

代码语言:javascript
复制
gr_alv->set_screen_status( report   = sy-repid
                           pfstatus = 'ALV_STATUS' ).

如果要使用基于类的模型来设置ALV函数,则必须将网格对象嵌入到屏幕中的自定义容器中。

票数 3
EN

Stack Overflow用户

发布于 2011-07-04 19:57:23

您需要做的似乎是从网格对象中获取一个CL_SALV_FUNCTIONS_LIST实例,如下所示:

代码语言:javascript
复制
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类上的文档(即在transaction SE24中显示类时单击documentation按钮)。后者确切地告诉你需要做什么。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6575155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档