关于Grid的Head

zhjno1xp 2006-11-13 11:55:57
我的一个Grid的Column1的Head1名为"姓名",我在他的click事件填写代码,

IF this.Caption = "姓名" then &&如果台头显示姓名,点击后显示反向姓名,反响排序
MESSAGEBOX('ff')

SET ORDER TO NAME descending
this.Caption = "反向姓名"

ENDIF
IF this.Caption = "反向姓名" THEN &&如果台头显示反向姓名,点击后显示姓名,正向排序
SET ORDER TO name ascending
this.Caption = "姓名"
ENDIF
thisform.Refresh()

...全文
234 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2006-11-13
  • 打赏
  • 举报
回复
请参考:

如何实现点击Grid控件的列标头,然后数据按此列进行升序或降序排序?

*---------------------------------------

如:表有如下字段:

姓名 数学 语文 英语

如何实现点哪一列,数据表就按哪列升序或降序排列


---------------------------------------------------------------
方法一:

*在表单中加入一新方法,取名为MSORT
*(新建的方法或属性将出现在属性窗口的最底部)。
*然后在此方法中写入以下代码:

LPARAMETERS xfield,xsort,xcol,xgrid,xtable &&**..字段名,升降序,第几列,表格名,表名
IF PARAMETERS()<5
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



*然后把Grid控件的ColumnCount修改为你的列数,在GRID的每列的HEADER1的CLICK(单击)或者其它(如双击)中写入﹕

THISFORM.MSORT(THIS.PARENT.CONTROLSOURCE,RIGHT(ALLT(THIS.CAPTION),2),VAL(SUBSTR(THIS.PARENT.NAME,7,2)),this.Parent.Parent.Name,this.Parent.Parent.RecordSource) &&**..字段名,升降序,第几列,表名,表名

---------------------------------------------------------------

方法二:

*例如:前三列分别是f1,f2,f3
*把Grid控件的ColumnCount修改为3或你的列数
*表单的LOAD事件:

PUBLIC nF1,nF2,nF3
nF1=0
nF2=0
nF3=0
USE tmp
INDE ON f1 TAG f1 OF FFHSY &&创建非结构复合索引(提高速度)
INDE ON f2 TAG f2 OF FFHSY &&创建非结构复合索引(提高速度)
INDE ON f3 TAG f3 OF FFHSY &&创建非结构复合索引(提高速度)
SET ORDE TO
GO TOP

*GRID第一列标头的CLICK事件:
IF nF1=0
SET ORDE TO F1 ASCENDING &&升序
THIS.Caption=STRTRAN(STRTRAN(THIS.Caption,'↑',''),'↓','')+'↑'
nF1=1
ELSE
SET ORDE TO F1 DESCENDING &&降序
THIS.Caption=STRTRAN(STRTRAN(THIS.Caption,'↑',''),'↓','')+'↓'
nF1=0
ENDIF
FOR I=2 TO 3
THISFORM.GRID1.COLUMNS(I).HEADER1.CAPTION=STRTRAN(STRTRAN(THISFORM.GRID1.COLUMNS(I).HEADER1.CAPTION,'↑',''),'↓','')
ENDFOR
GO TOP
THISFORM.grid1.REFRESH

*GRID第二列标头的CLICK事件:
IF nF2=0
SET ORDE TO F2 ASCENDING &&升序
THIS.Caption=STRTRAN(STRTRAN(THIS.Caption,'↑',''),'↓','')+'↑'
nF2=1
ELSE
SET ORDE TO F2 DESCENDING &&降序
THIS.Caption=STRTRAN(STRTRAN(THIS.Caption,'↑',''),'↓','')+'↓'
nF2=0
ENDIF
FOR I=1 TO 3
IF I!=2
THISFORM.GRID1.COLUMNS(I).HEADER1.CAPTION=STRTRAN(STRTRAN(THISFORM.GRID1.COLUMNS(I).HEADER1.CAPTION,'↑',''),'↓','')
ENDIF
ENDFOR
GO TOP
THISFORM.grid1.REFRESH

*GRID第三列标头的CLICK事件:
IF nF3=0
SET ORDE TO F3 ASCENDING &&升序
THIS.Caption=STRTRAN(STRTRAN(THIS.Caption,'↑',''),'↓','')+'↑'
nF3=1
ELSE
SET ORDE TO F3 DESCENDING &&降序
THIS.Caption=STRTRAN(STRTRAN(THIS.Caption,'↑',''),'↓','')+'↓'
nF3=0
ENDIF
FOR I=1 TO 2
THISFORM.GRID1.COLUMNS(I).HEADER1.CAPTION=STRTRAN(STRTRAN(THISFORM.GRID1.COLUMNS(I).HEADER1.CAPTION,'↑',''),'↓','')
ENDFOR
GO TOP
THISFORM.grid1.REFRESH

*你还可以设置一个按钮用于取消排序:
SET ORDE TO
GO TOP
THISFORM.grid1.REFRESH


2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧