无论是fuction ALV 还是OOALV 其实在设置过滤时候 都是把gt_sort的内表传进去就好,目前我没见过OOALV设置过滤时候,需要声明类、实例化等操作。如果你写过,欢迎指导,我们一起交流啊~~~~、
首先定义过滤内表,它参照的参考结构是 lvc_t_sort.
DATA: gt_sort TYPE lvc_t_sort。
设置排序的子例程,up表示升序 down表示降序
* 字段排序
PERFORM frm_sort_matnr .
FORM frm_sort_matnr.
DATA ls_sort TYPE lvc_s_sort .
ls_sort-spos = '1' .
ls_sort-fieldname = 'MATNR' .
ls_sort-up = 'X' . "A to Z
ls_sort-down = space .
APPEND ls_sort TO gt_sort .
ENDFORM.
如果是OOALV可以传递给set_table_for_first_display///这个方法的‘IT_SORT’ 参数来初始化一个排序.
如果是FUNCTION ALV可以传递给REUSE_ALV_GRID_DISPLAY_LVC这个方法的 ‘IT_SORT_LVC’ 参数来初始化一个排序.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
IT_SORT_LVC = gt_sort
TABLES
t_outtab = gt_mseg
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
```bash
CALL METHOD lcl_grid->set_table_for_first_display
EXPORTING
is_layout = gs_layo "显示格式
is_variant = lv_variant "变式布局
it_toolbar_excluding = gt_exclubar "排除按钮
i_save = 'A'
CHANGING
it_sort = gt_sort "排序
it_fieldcatalog = gt_fcat "显示列
it_outtab = gt_mseg. "数据
在设置过滤时候 和排序是一个方法,这里直接展示代码
* 过滤
DATA: gt_filter TYPE lvc_t_filt.
**1过滤**
PERFORM frm_filter_table .
**2**
FORM frm_filter_table .
DATA: ls_filter TYPE lvc_s_filt.
ls_filter-fieldname = 'BWART'.
ls_filter-sign = 'E'.
ls_filter-option = 'BT'.
* ls_filter-valut = '101'.
ls_filter-low = '501'.
ls_filter-high = '502'.
APPEND ls_filter TO gt_filter.
ENDFORM.
这里ls_filter-low = ‘501’. 是剔除低值501到高值502范围之间得数据。
ls_filter-high = ‘502’. ls_filter-option = ‘BT’.包含范围
如果要只选出某个值得那些数据应该这样写
ls_filter-option = ‘EQ’. ls_filter-low = ‘601’. ls_filter-sign = ‘I’.这样只会选出值为601得所有数据
FORM frm_filter_table .
DATA: ls_filter TYPE lvc_s_filt.
ls_filter-fieldname = 'BWART'.
ls_filter-sign = 'I'.
ls_filter-option = 'EQ'.
ls_filter-low = '601'.
APPEND ls_filter TO gt_filter.
ENDFORM.
最后将内表gt_filter传到ALV展示函数里即可。