例如:前三列分别是f1,f2,f3
表单的LOAD事件:
PUBLIC nF1,nF2,nF3
nF1=0
nF2=0
nF3=0
USE tmp
INDE ON f1 TAG f1
INDE ON f2 TAG f2
INDE ON f3 TAG f3
SET ORDE TO
GRID第一列标头的click:
IF nF1=0
SET ORDE TO f1 ASCENDING &&升序
nF1=1
ELSE
SET ORDE TO f1 DESCENDING &&降序
nF1=0
ENDIF
THISFORM.grid1.REFRESH
GRID第二列标头的click:
IF nF2=0
SET ORDE TO f2 ASCENDING &&升序
nF2=1
ELSE
SET ORDE TO f2 DESCENDING &&降序
nF2=0
ENDIF
THISFORM.grid1.REFRESH
GRID第三列标头的click:
IF nF3=0
SET ORDE TO f3 ASCENDING &&升序
nF3=1
ELSE
SET ORDE TO f3 DESCENDING &&降序
nF3=0
ENDIF
THISFORM.grid1.REFRESH
你还可以设置一个按钮用于取消排序:
SET ORDE TO
THISFORM.grid1.REFRESH
你在表單中加入一個新方法。
然后在此方法中寫入以下代碼。
LPARAMETERS xfield,xsort,xcol,xgrid,xtable &&**..字段名,升降序,第几列,表格名,表名
IF PARAMETERS()<4
RETURN .F.
ENDIF
SET INDEX TO
LOCAL TEM1
IF xsort='△'
SELECT * FROM &xtable ORDER BY &xfield DESC INTO CURSOR TEM1
ELSE
SELECT * FROM &xtable ORDER BY &xfield ASC INTO CURSOR TEM1
ENDIF
IF _tally>0
SELECT (xtable)
ZAP
APPEND FROM DBF('TEM1')
ELSE
RETURN
ENDIF
vst='thisform.'+xgrid
IF !EMPTY(vst)
FOR i=1 TO &vst..COLUMNCOUNT &&**..先去掉▽(△)再加△(▽)
st0=vst+'.COLUMN'+ALLT(STR(i))+'.HEADER1.CAPTION'
IF AT(RIGHT(ALLT(&st0),2),"▽△")!=0
&st0.=LEFT(ALLT(&st0),LEN(ALLT(&st0))-2)
ENDIF
IF i=xcol &&**..第几例
IF AT(xsort,"▽△")=0.OR.xsort="▽"
&st0.=&st0+"△"
ELSE
&st0.=&st0+"▽"
ENDIF
ENDIF
ENDFOR
ENDIF
SELECT (xtable)
THISFORM.refresh
SELECT (xtable)
GO TOP
THISFORM.refresh