主题:关于表格控件中数据的排序
shijier
[专家分:60] 发布于 2006-03-24 16:46:00
怎么可以使表格控件中的数据按所单击的列标头排序(即当单击某列的列标头时,表格中的数据按该列数据进行排序)。现在的问题是用什么事件去触发那段程序最好。
注:我不想用每列的HEADER1的CLICK事件触发,因为我的表格每次运行时的列数都可能不同。
回复列表 (共20个回复)
11 楼
akira_ok [专家分:50] 发布于 2007-03-06 17:11:00
6楼专家,您好
您的代码我试过了,如果用数据库下的表,在vfp中点运行是可以实现的,但连编成EXE后出现“不能更新临时表”的错误提示。
经测试,如果是自由表的话就没有问题了。
为什么?
有没有什么办法补救?
12 楼
akira_ok [专家分:50] 发布于 2007-03-08 08:46:00
怎么没有专家给解决一下啊!!!!
13 楼
moz [专家分:37620] 发布于 2007-03-08 10:08:00
临时表需要加入 readwrite 关键字
14 楼
akira_ok [专家分:50] 发布于 2007-03-08 11:32:00
我是初学者
麻烦请高手详细说明在哪个位置(句)处做怎样的修改,非常感谢!
15 楼
djGong2002 [专家分:5750] 发布于 2007-03-08 17:35:00
如果点击某一列而不是标头,那么在AfterRowColChange中这样是否方便一点呢:
LPARAMETERS nColIndex
n=STR(nColIndex)
This.RecordSourceType= 4
This.ColumnCount=-1
This.RecordSource="select * from &cfile order by &n into cursor SYS(2015) "
This.Refresh
16 楼
moz [专家分:37620] 发布于 2007-03-08 18:30:00
我想请教一下 DJ
点击标头的事件写到哪里去?
我怎么在设计时找不着北?
17 楼
djGong2002 [专家分:5750] 发布于 2007-03-09 09:23:00
[quote]我想请教一下 DJ
点击标头的事件写到哪里去?
我怎么在设计时找不着北?[/quote]
moz老师,刚看到您的帖子.我试验了一下:
当Grid的ColumnCount=-1时,找不到表格中的Column对象,更没有Header和Text了.所以要先设置好Grid的数据源后,在属性窗口中可以找到某一列的Header,它有Click事件.
另外,如果设空表格的ColumnCount=1,然后写Header的Click事件代码,当在程序中把数据源定义到表格后,Header.Click事件代码不被执行.
其他的奥妙不清楚.
我在关注网友们的高招.
18 楼
moz [专家分:37620] 发布于 2007-03-09 10:22:00
果然是年轻有为,我看好你.
19 楼
ckjing [专家分:10] 发布于 2009-09-03 23:12:00
学习中,好贴
20 楼
colcolcom [专家分:2330] 发布于 2009-09-05 06:51:00
各位大侠的方法是好用,
我这里有一种,供参考:
&&将以下放入grid1的init事件中
FOR i=1 TO thisform.grid1.ColumnCount
thisform.grid1.Columns(i).Header1.caption=' '
thisform.grid1.Columns(i).visible=.f.
ENDFOR
this.RecordSource=''
SELECT form_data_kccl &&表名
ls=IIF(fcount()>thisform.grid1.ColumnCount,thisform.grid1.ColumnCount,fcount())
FOR i=1 TO ls
thisform.grid1.Columns(i).Header1.caption=FIELD(i)
thisform.grid1.Columns(i).visible=.t.
ENDFOR
thisform.Refresh
&&&&将以下放入一个标签Label1,同时设置他的visible=.f.
lpara px
thisform.grid1.RecordSource=""
selecthar="select * from form_data_kccl ORDER BY "+cSQL+" INTO CURSOR form_data_kccl READWRITE "
&selecthar
thisform.grid1.init
&&&&&&&&&以下放入每一个列标头的click 事件里
IF LEN(ALLTRIM(this.Caption))>0
THISFORM.Label1.Click(this.Caption)
ENDIF
&&&&&&&&&&&&&&这方法直观,初学者看简单点
&&&&&&&&&&77注意,你的grid1的列数一定要够,但这个简单,你可以在属性里设置为50
我来回复