如何将VFP的grid设置成点击标题排序
就是点击列标题的时候,按此字段排序另外,不要告诉我将代码写在grid的header里,因为表格的数据源可能是变动的,没有绑定数据源,也就是说在运行中列标题会改变。...
就是点击列标题的时候,按此字段排序另外,不要告诉我将代码写在grid的header里,因为表格的数据源可能是变动的,没有绑定数据源,也就是说在运行中列标题会改变。
展开
2个回答
2013-07-10
展开全部
首先在表单中新建一个方法,命名为:headerclick写入如下代码:=AEVENT(aSourceObj, 0)
oSourceObj = aSourceObj[1]
cRowName=osourceobj.CAPTION
cgrid='thisform.grid1' &&&&表格的名字ogrid=&cgrid
cfilename=ogrid.RECORDSOURCEIF EMPTY(cfilename) OR SELECT(cfilename)=0
RETURN
ENDIFogrid.RECORDSOURCE=''
SELECT * FROM (cfilename) INTO CURSOR (cfilename+'_tmp')
USE IN (cfilename)SELECT * FROM (cfilename+'_tmp') ORDER BY &crowname INTO DBF (cfilename)
USE IN (cfilename+'_tmp')ogrid.RECORDSOURCE=cfilename
SELECT(cfilename)
GOTO TOP
ogrid.SETFOCUS
然后在表格的refresh(刷新方法)里写入如下代码:cgrid='thisform.'+ALLTRIM(this.name)
ogrid=&cgridFOR gnCount = 1 TO this.columncount && header代理
cheader='this.column'+alltrim(str(gncount))+'.header1'
oheader=&cheader
oheader.tooltiptext='单击按本列值重新排序表格数据'
BINDEVENT(oheader,"Click",thisform,"headerclick")
NEXT
当表格装载数据后,刷新表格(运行方法thisform.grid1.refresh),即可将表格中header的click事件设置为自定义方法的代理。当单击表格header时,即运行headerclick自定义方法,将表格数据源表重新排格
oSourceObj = aSourceObj[1]
cRowName=osourceobj.CAPTION
cgrid='thisform.grid1' &&&&表格的名字ogrid=&cgrid
cfilename=ogrid.RECORDSOURCEIF EMPTY(cfilename) OR SELECT(cfilename)=0
RETURN
ENDIFogrid.RECORDSOURCE=''
SELECT * FROM (cfilename) INTO CURSOR (cfilename+'_tmp')
USE IN (cfilename)SELECT * FROM (cfilename+'_tmp') ORDER BY &crowname INTO DBF (cfilename)
USE IN (cfilename+'_tmp')ogrid.RECORDSOURCE=cfilename
SELECT(cfilename)
GOTO TOP
ogrid.SETFOCUS
然后在表格的refresh(刷新方法)里写入如下代码:cgrid='thisform.'+ALLTRIM(this.name)
ogrid=&cgridFOR gnCount = 1 TO this.columncount && header代理
cheader='this.column'+alltrim(str(gncount))+'.header1'
oheader=&cheader
oheader.tooltiptext='单击按本列值重新排序表格数据'
BINDEVENT(oheader,"Click",thisform,"headerclick")
NEXT
当表格装载数据后,刷新表格(运行方法thisform.grid1.refresh),即可将表格中header的click事件设置为自定义方法的代理。当单击表格header时,即运行headerclick自定义方法,将表格数据源表重新排格
2013-07-10
展开全部
给你个简单的。这个关建在知道当前是那个表的那个字段。在每个要排序的header里写上这样的: PX=ALLT(THIS.PARENT.CONTROLSOURCE) &&读取当前所点列的表和字段名
SM=AT(".",PX)
PX1=SUBST(PX,1,SM-1) &&当前表名
PX2=SUBST(PX,SM+1) &&当前字段名
THISFORM.TEXT1.VALUE=PX1 &&这个是显示当前的表名
THISFORM.TEXT2.VALUE=PX2 &&这个是显示当前的字段名 以上是重点
SELE &PX1 &&转到表
INDEX ON &PX2 TO TEMP &&排序
GO TOP &&到第一个记录
THISFORM.GRID1.REFRESH &&刷新当前表格
SM=AT(".",PX)
PX1=SUBST(PX,1,SM-1) &&当前表名
PX2=SUBST(PX,SM+1) &&当前字段名
THISFORM.TEXT1.VALUE=PX1 &&这个是显示当前的表名
THISFORM.TEXT2.VALUE=PX2 &&这个是显示当前的字段名 以上是重点
SELE &PX1 &&转到表
INDEX ON &PX2 TO TEMP &&排序
GO TOP &&到第一个记录
THISFORM.GRID1.REFRESH &&刷新当前表格
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询