ALV GRID的参考文档 ( 6 ) - 设置排序条件

设置排序条件
可以为要显示的数据设置排序条件。可以把排序规则插入到结构类型为‘LVC_T_SORT’的内表中。如果想对显示的数据进行初始排序,就把它传给方法‘SET_TABLE_FOR_FIRST_DISPLAY’的参数IT_SORT.
FORM prepare_sort_table CHANGING pt_sort TYPE lvc_t_sort.
 DATA: ls_sort TYPE lvc_s_sort.
 Ls_sort-spos = ‘1’.
 Ls_sort-fieldname = ‘CARRID’.
Ls_sort-up = ‘X’.
Ls_sort-down = space.
APPEND ls_sort TO pt_sort.
 
Ls_sort-spos = ‘2’.
Ls_sort-fieldname = ‘SEATSOCC’.
Ls_sort-up = space.
Ls_sort-down = ‘X’.
APPEND ls_sort TO pt_sort.
.
ENDFORM..
这里有两点需要注意:首先是如果在排序表中存在的字段在fieldcat表中不存在,就会出现dump,另外就是被排序的字段缺省情况下相同的值将会被合并,不过你可以设置layout结构的no_merging来避免这种情况。如果你只是想指定的某些列不被合并你可以设置fieldcat表中该字段行的no_merging。
可以通过方法:‘get_sort_criteria’,’set_sort_criteria’来动态设置排序准则。
筛选
跟排序规则差不多,可以通过填充类型为‘LVC_T_FILT’的表来实现筛选,插入这个表的方法跟插入ranges变量差不多。
FORM prepare_filter_table CHANGING pt_filt TYPE lvc_t_filt.
 DATA: ls_filt TYPE lvc_s_filt.
 
 Ls_filt-fieldname = ‘FLDATE’.
 Ls_filt-sign = ‘E’.
 Ls_filt-option = ‘BT’.
 Ls_filt-low = ‘20030101’.
 Ls_filt-high = ‘20031231’.
 
 APPEND ls_filt TO pt_filt.
ENDFORM.
你可以通过方法get_filter_criteria和set_filter_criteria来动态的设置筛选。
选择功能
选择某一行,某一列或者某一格是经常需要的功能。通过layout structure的sel_mode字段可以设置alv grid的选择方式。下面列表列举了可选择的方式和他们的功能。
Value
Mode
Possible selections
Comment
Space
Same as ‘B’
See ‘B’
Default setting
A
Column and row selection
Multiple columns
Multiple rows
用户可以通过左边的按钮来选择行
B
Simple selection list box
Multiple columns
Multiple rows
 
C
Multiple selection
List box
Multiple columns
Multiple rows
 
D
Cell selection
Multiple columns
Multiple rows
Any cells
用户可以通过左边的按钮来选择行
除了设置这些属性外,如果你设置了可以选择多行,那么行标志缺省情况下是可见的,可以设置NO_ROWMARK来隐藏行标志。
需要注意的一点是如果ALV GRID是可编辑的,它将会替代你在layout设置中选择的选择模式。
当进行了选择以后,重要的一点便是要知道我们要选择的是什么。可以通过以下方法来实现:
GET_SELECTED_CELLS: 这个方法通过参数‘et_cell’返回类型为LVC_T_CELL的表来描述选择单元格的确切位置。Alv grid control只返回选择单元格的确切位置。如果你选择的是整行或整列那么这个方法不返回任何信息。这个方法返回的是选择单元格的行属性和列属性。
GET_SELECTED_ROWS: 对于A,C,D的选择方式,你可以选择多行。这个方法可以用来告诉你所选择的行。他有两个参数,不过参数et_index_rows已经不用,另一个参数et_row_no的类型为LVC_T_ROWID用来显示所选择行的索引信息。
GET_SELECTED_COLUMNS:跟前面的方法一样。他的输出参数et_index_columns的类型为lvc_t_col来描述所选择的列信息。
在程序中你可能需要选择某些列,行或格,你可以使用这些方法的set版本来实现与前面相反的目的。在屏幕切换之后回来到原来的屏幕,alv grid的选择信息有可能会丢掉。应该在屏幕切换之前使用get方法得到选择信息,然后在屏幕切换之后使用set方法恢复选择信息。

你可能感兴趣的:(ALV GRID的参考文档 ( 6 ) - 设置排序条件)