cl_gui_alv_grid标准工具栏排序按钮无法正常工作

2020-08-20 12:57发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我创建了一个ALV程序,并显示了标准的alv工具栏,该工具栏还包括排序asc和Des按钮,但是这些按钮不能很好地工作。

前期问题:

1。 一列按升序排列-很好。 现在单击同一列上的降序按钮,它将打开一个对话框,在这里我需要选择排序顺序,单选按钮位于其中,用于排序asc和sort des。 我选择了desc按钮,但它并没有按des顺序排序。

2。 现在,我选择多个列,然后单击按asc顺序排序的按钮,它再次显示对话框以选择列,并要求选择相应的单选按钮,例如asc或desc。 为所有列选择Asc,不进行排序。

我曾经假设过,这些是标准的排序按钮,应该可以正常工作,但看起来并不像。 我有什么想念的吗? 我需要在字段目录中设置排序吗?

最好的问候

KS

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我创建了一个ALV程序,并显示了标准的alv工具栏,该工具栏还包括排序asc和Des按钮,但是这些按钮不能很好地工作。

前期问题:

1。 一列按升序排列-很好。 现在单击同一列上的降序按钮,它将打开一个对话框,在这里我需要选择排序顺序,单选按钮位于其中,用于排序asc和sort des。 我选择了desc按钮,但它并没有按des顺序排序。

2。 现在,我选择多个列,然后单击按asc顺序排序的按钮,它再次显示对话框以选择列,并要求选择相应的单选按钮,例如asc或desc。 为所有列选择Asc,不进行排序。

我曾经假设过,这些是标准的排序按钮,应该可以正常工作,但看起来并不像。 我有什么想念的吗? 我需要在字段目录中设置排序吗?

最好的问候

KS

付费偷看设置
发送
8条回答
奄奄一息的小鱼
1楼 · 2020-08-20 13:50.采纳回答

在Michael的帮助下,我得以解决此问题。 我创建了一个自定义的刷新按钮,而不是标准的刷新事件,然后单击该按钮进行了数据检索和其他任务。

bbpeas
2楼-- · 2020-08-20 13:47

您是否在SAP注释中查找补丁?

落灬小鱼
3楼-- · 2020-08-20 13:32
  1. 排序演示
    请查看SAP演示报告" BCALV_GRID_DEMO"(或任何其他" BCALV_GRID_ *"报告),执行该演示并选择列标题,然后对asc/desc进行排序并选择 列字段,然后"对asc/desc进行排序"。 与您的问题相比,它的行为是否符合预期?
  2. 在列标题上应用排序
    当您在列标题上单击鼠标左键,然后紧随其中一个用于升序或降序的符号时,它将对 立刻基于该列的行(您不必不必通过"定义排序顺序"对话框)。 如果您之前单击过其他任何位置,则可以,您会看到"定义排序顺序"对话框。
  3. "定义排序顺序"对话框
    如果您打开了"定义排序顺序"对话框, 您需要先将所有需要的和可用的列从左侧的列集中移动到右侧的排序条件。 其次,您需要使用向上和向下按钮设置设置排序条件的顺序。 第三,您需要设置列上的排序条件是升序还是降序。 最后,您需要单击绿色的复选标记按钮以应用此排序顺序
  4. 仍然存在其他问题
    如果您的问题与上述步骤无关,请提供有关屏幕截图的详细信息 描述的问题,以及提供与使用表数据创建和设置ALV_GRID有关的编码以供显示
歪着头看世界
4楼-- · 2020-08-20 13:43

正如您所说的BCALV_GRID_DEMO程序很好, 没有错误,没有补丁。

因此,您要做的最简单的事情就是将程序与BCALV_GRID_DEMO进行比较,并简化代码,直到程序运行,然后找出问题所在。

CPLASF-自律
5楼-- · 2020-08-20 13:33

1。 在此演示程序中,排序工作正常。 同样,在代码中没有专门实现排序的东西。 它是标准工具栏按钮,应该可以正常工作。

2。 右键单击也具有相同的行为。 第一次很好,第二次打开对话框。

3。 首先,此对话框不应该出现,其次,如果我要对一列进行排序,为什么我需要将所有列移至排序条件。

4。 单击信息记录列上的升序排序,效果很好。 然后通过选择同一列单击降序按钮,打开对话框,在该对话框中选择降序,它完全破坏了升序或降序的排序。 参见屏幕截图。 分拣1。 您可以看到在列上显示了降号,但排序不正确。

编码如下:

方法create_cont_grid。
如果me-> custom_container是INITIAL。 "此检查可确保仅在第一次处理屏幕PBO时创建容器。
*创建容器
创建对象我-> custom_container
导出
container_name ='MYCONTAINER'
例外情况
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link =5。
如果sy-subrc <>0。
*错误 创建硬币容器

ENDIF。
*使用容器作为父容器创建alv网格。
创建对象me-> gr_grid
导出
i_parent = me-> custom_container
例外
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
其他=5。
IF sy-subrc <>0。
*创建错误 grid

ENDIF。
*触发第一个显示
me-> first_display()。
ELSE。
*只需刷新网格。
me-> refresh_grid()。
ENDIF。
ENDMETHOD。

方法首次显示。
数据:ls_layout类型lvc_s_layo,
ls_variant类型不变量,
lv_repid TYPE repid。

数据ls_排除类型ui_func。
数据lt_toolbar_不包括类型ui_functions。

*排除不必要的标准工具栏按钮
ls_exclude = cl_gui_alv_grid => mc_fc_loc_append_row。
APPEND ls_exclude排除到lt_toolbar_except。
ls_exclude = cl_gui_alv_grid => mc_fc_loc_de cl_gui_alv_grid => mc_fc_loc_insert_row。
APPEND ls_exclude排除到lt_toolbar_clusion。 br> * ls_exclude = cl_gui_alv_grid => mc_fc_refresh。
* APPEND ls_exclude TO lt_toolbar_clusion。
ls_exclude = cl_gui_alv_grid => mc_fc_loc_cut。
APPEND ls_exclude _c> c = c APPEND ls_exclude到lt_toolbar_exception。
ls_exclude = cl_gui_alv_grid => mc_fc_loc_undo。
APPEND ls_exclude到lt_toolbar_clusion。
*以下两个要排除带有Overwri的插入 te Combi Button
ls_exclude = cl_gui_alv_grid => mc_fc_loc_c_c_c_c_c_c_c_c_c_c_c_c_c_c_c_c_c_c_l_c_c_c_c_c_c_c_c_c_c_c_c_c_c_c_c_c_c_c_c_c_l_c_l_c_c_l_c_bar =。
APPEND ls_exclude = cl_gui_alv_grid => mc_fc_loc_c_s_c_c br> APPEND ls_exclude至lt_toolbar_clusion。
ls_exclude = cl_gui_alv_grid => mc_fc_views。
APPEND ls_exclude至lt_toolbar_clusion。


lv_repid = sy-repid。
ls_variant-report = lv_repid。

ls_layout-zebra ='X'。
ls_layout-smalltitle ='X'。

*第一次显示ALV。
调用方法gr_grid-> set_table_for_first_display
导出
is_variant = ls_variant
is_layout = ls_layout
i_default ='X'",X用户可以保存默认布局 。
i_save ='A'"空格:无法保存布局。如果存在空格,用户将无法保存默认布局。 U:仅用户定义的布局。 X:仅全局布局。 答:用户定义的布局和全局布局。
it_toolbar_clusion = lt_toolbar_clusion
更改
it_fieldcatalog = ot_fieldcat []
it_outtab = ot_data
例外情况
invalid_parameter_combination = 1
program_error = 2 < br> too_many_lines = 3
其他=4。
IF sy-subrc NE0。
*网格显示错误
ENDIF。

*将类分配给事件处理程序。
*创建对象gr_event_handler。
SET HANDLER me-> handle_hotspot_click FOR gr_grid。
SET HANDLER me-> on_data_changed FOR gr_grid。
SET HANDLER me-> 刷新FOR gr_grid。
ENDMETHOD。

谢谢。

引用程序

BCALV_GRID_05

添加自定义按钮。
compass1988
7楼-- · 2020-08-20 13:31
还有其他想法吗?

Br,

KS

一周热门 更多>