接分,我来一个。
-----------------------------------
$PBExportHeader$uo_dwsort.sru
$PBExportComments$Datawindow userobject with sort functionality
forward
global type uo_dwsort from datawindow
end type
end forward
global type uo_dwsort from datawindow
integer width = 1303
integer height = 904
integer taborder = 2
boolean livescroll = true
borderstyle borderstyle = stylelowered!
end type
global uo_dwsort uo_dwsort
type prototypes
end prototypes
type variables
Public:
boolean MultiSelect = False
long LastRow
integer ii_ShowStatus = 50 // Mostrar onde vai de 50 em 50 (por defeito)
// Extract the columname from the header label 判断是否点击的是列头;
// (by taking out the header suffix).
IF Right(ls_headername, li_suffixlen) <> ls_defaultheadersuffix THEN
// Cannot determine the column name from the header.
Return -1
END IF
ls_colname = Left (ls_headername, li_headerlen - li_suffixlen)
// Validate the column name.判断此列是否有效;
If IsNull(ls_colname) or Len(Trim(ls_colname))=0 Then
Return -1
End If
// Check the previous sort click.判断是否点击的是上次点击过的列;
IF as_sortcolumn = ls_colname THEN
// Second sort click on the same column, reverse sort order.如果点的是同一列,则获取上次点击是如何排序,此次进行相反排序;
IF as_sortorder = " A" THEN
as_sortorder = " D"
ELSE
as_sortorder = " A"
END IF
ELSE
// Clicked on a different column.如果是不同列,则进行升序;
as_sortcolumn = ls_colname
as_sortorder = " A"
END IF
// Build the sort string.此处下句是进行含有CODE TABLE时对显示值排序,而并不对真正值排序,采用LOOKUPDISPLAY;
//IF of_GetUseDisplay() And of_UsesDisplayValue(ls_colname) THEN
// ls_sortstring = "LookUpDisplay(" + ls_colname + ") " + as_sortorder
//ELSE
ls_sortstring = as_sortcolumn + as_sortorder
//END IF
// Perform the SetSort operation (check the rc).开始排序;
//li_rc = of_SetSort (ls_sortstring)
li_rc = ad_dw.SetSort (ls_sortstring)
If li_rc < 0 Then Return li_rc
// Perform the actual Sort operation (check the rc).开始排序;
//li_rc = of_Sort()
li_rc = ad_dw.Sort()
If li_rc < 0 Then Return li_rc