ALV IT_SORT-排序

目录

前言

实战开发


前言

        在ABAP ALV中,IT_SORT是一个内表参数,用于定义用户可以对列表进行排序的列及其排序方式(升序或降序)。这个参数在调用显示ALV的函数REUSE_ALV_GRID_DISPLAY时使用,以提供动态排序功能给最终用户。

ALV 排序参数有两个IT_SORT和 IT_SORT_LVC,两个参数的类型定义虽然不一样,但结构是一样的,所以操作上并无差异。

        下面查看下IT_SORT参数的类型结构定义:

  TYPES: BEGIN OF slis_sortinfo_alv,
         spos      LIKE alvdynp-sortpos,   " 排序顺序序号
         fieldname TYPE slis_fieldname,    " 排序内表字段名称
         tabname   TYPE slis_fieldname,    " 排序内表名称
         up        LIKE alvdynp-sortup,    " 升序
         down      LIKE alvdynp-sortdown,  " 降序
         group     LIKE alvdynp-grouplevel,
         subtot    LIKE alvdynp-subtotals, " 输出小计
         comp(1) TYPE c,
         expa(1) TYPE c,
         obligatory(1) TYPE c,
       END OF slis_sortinfo_alv.

IT_SORT的核心代码

  DATA: ls_sort_lvc TYPE slis_sortinfo_alv ,
        lt_sort_lvc TYPE TABLE OF slis_sortinfo_alv .
* 设置排序参数
  ls_sort_lvc-spos        = 1 .        " 排序顺序
  ls_sort_lvc-fieldname   = 'DEPTIME' .  " 排序字段
  ls_sort_lvc-up          = 'X' .      " 升序
  APPEND ls_sort_lvc TO lt_sort_lvc .
  CLEAR ls_sort_lvc .
  ls_sort_lvc-spos        = 2 .        " 排序顺序
  ls_sort_lvc-fieldname   = 'ARRTIME' .  " 排序字段
  ls_sort_lvc-up          = 'X' .      " 升序
  APPEND ls_sort_lvc TO lt_sort_lvc .
  CLEAR ls_sort_lvc .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      it_sort            = lt_sort_lvc
…

IT_SORT_LVC的核心代码

  DATA: ls_sort_lvc TYPE lvc_s_sort ,
        lt_sort_lvc TYPE lvc_t_sort .
* 设置排序参数
  ls_sort_lvc-spos        = 1 .        " 排序顺序
  ls_sort_lvc-fieldname   = 'DEPTIME' .  " 排序字段
  ls_sort_lvc-up          = 'X' .      " 升序
  APPEND ls_sort_lvc TO lt_sort_lvc .
  CLEAR ls_sort_lvc .
  ls_sort_lvc-spos        = 2 .        " 排序顺序
  ls_sort_lvc-fieldname   = 'ARRTIME' .  " 排序字段
  ls_sort_lvc-up          = 'X' .      " 升序
  APPEND ls_sort_lvc TO lt_sort_lvc .
  CLEAR ls_sort_lvc .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      it_sort_lvc        = lt_sort_lvc
…

实战开发

展示效果

完整代码

TYPE-POOLS:slis.

DATA:gt_fieldcat TYPE slis_t_fieldcat_alv,
     gs_fieldcat TYPE slis_fieldcat_alv,
     gs_layout   TYPE slis_layout_alv,
     gv_repid    TYPE sy-repid.

DATA:gt_spfli LIKE STANDARD TABLE OF spfli WITH HEADER LINE.

INITIALIZATION.
  gv_repid = sy-repid.

*屏幕开始事件
START-OF-SELECTION.
  PERFORM f_getdata.
  PERFORM f_catalog.
  PERFORM f_alvshow.

FORM f_getdata.
  SELECT * FROM spfli INTO TABLE gt_spfli UP TO 10 ROWS.
ENDFORM.

FORM f_catalog.
*fieldcat属性
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = gv_repid
      i_structure_name       = 'SPFLI'
    CHANGING
      ct_fieldcat            = gt_fieldcat "导出gt_fieldcat内表数据
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CLEAR gs_fieldcat.
*"对gt_fieldcat属性的修改
  READ TABLE gt_fieldcat INTO gs_fieldcat INDEX 2. "将第二列设为热点显示
  gs_fieldcat-hotspot = 'X'.
  MODIFY gt_fieldcat  FROM gs_fieldcat INDEX 2.

*layout属性
  gs_layout-zebra = 'X'."斑马线显示
  gs_layout-colwidth_optimize = 'X'."列宽度最优化显示
ENDFORM.

FORM f_alvshow.
  DATA: ls_sort_lvc TYPE slis_sortinfo_alv ,
        lt_sort_lvc TYPE TABLE OF slis_sortinfo_alv .
* 设置排序参数
  ls_sort_lvc-spos        = 1 .        " 排序顺序
  ls_sort_lvc-fieldname   = 'DEPTIME' .  " 排序字段
  ls_sort_lvc-up          = 'X' .      " 升序
  APPEND ls_sort_lvc TO lt_sort_lvc .
  CLEAR ls_sort_lvc .
  ls_sort_lvc-spos        = 2 .        " 排序顺序
  ls_sort_lvc-fieldname   = 'ARRTIME' .  " 排序字段
  ls_sort_lvc-up          = 'X' .      " 升序
  APPEND ls_sort_lvc TO lt_sort_lvc .
  CLEAR ls_sort_lvc .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = gv_repid
      i_grid_title       = 'ALV REPORT TEST' "ALV显示标题
      is_layout          = gs_layout
      it_fieldcat        = gt_fieldcat
      it_sort            = lt_sort_lvc
    TABLES
      t_outtab           = gt_spfli
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.

 

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP_亮亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值