目录
前言
在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.