| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5815 人关注过本帖
标题:请教坛中大神一个关于grid表点击表头排序的问题
只看楼主 加入收藏
jinnee99
Rank: 1
等 级:新手上路
帖 子:17
专家分:5
注 册:2013-10-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:21 
请教坛中大神一个关于grid表点击表头排序的问题
小弟我VFP编程一直是自学,不专业不正规,半调子。
以前解决grid表单点击排序一直是先绑定数据源,然后编写各字段的header的click事决。
后偶尔看到一个用Bindevent()函数解决的方法,一直在尝试,但不成功,还请坛中大神
百忙之中伸手拉小弟一把~~~  :)
test.rar (2.75 KB)

这是程序
搜索更多相关主题的帖子: grid 点击 表头 排序 click 
2018-03-13 15:47
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2195
专家分:3828
注 册:2007-4-27
收藏
得分:2 
bindevent.rar (2.78 KB)

只求每天有一丁点儿的进步就可以了
2018-03-13 17:37
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10527
专家分:42899
注 册:2014-5-20
收藏
得分:17 
新建文件夹.rar (3.48 KB)

主要部份:
** thisform.myClick 自定义表单方法,点击表格各栏目排序
LOCAL aCol[1], cmd
IF (AEVENTS(aCol,0) > 0)
    IF (VARTYPE(aCol[1])=="O") AND (PROPER(aCol[1].BaseClass)=="Header")
        cmd = "SELECT * FROM cp2013 ORDER BY " +;
            JUSTEXT(aCol[1].Parent.ControlSource) +;
            IIF(this.Ascending, " ASC ", " DESC ") +;
            "INTO CURSOR grid1_tmp"
        this.grid1.RecordSource = ""
        USE IN "grid1_tmp"
        EXECSCRIPT(cmd)
        this.grid1.RecordSource = "grid1_tmp"
        this.grid1.SetFocus
        this.Ascending = !this.Ascending &&自定义表单属性Ascending,升降序切换
    ENDIF
ENDIF

** thisform.Init
SELECT * FROM cp2013 INTO CURSOR grid1_tmp
this.grid1.recordsource = "grid1_tmp"
FOR EACH oColumn IN this.grid1.Columns
    BINDEVENT(oColumn.Header1, "Click", this, "myClick")
ENDFOR

2018-03-13 19:43
jinnee99
Rank: 1
等 级:新手上路
帖 子:17
专家分:5
注 册:2013-10-12
收藏
得分:0 
多谢两位大神,够我学习消化一阵子的了。
因为是野路子,所以这个解决的思路不能理解,还请两大神不要见笑~
2018-03-13 21:08
jinnee99
Rank: 1
等 级:新手上路
帖 子:17
专家分:5
注 册:2013-10-12
收藏
得分:0 
再次感谢,已经搞懂了~
2018-03-13 22:38
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2195
专家分:3828
注 册:2007-4-27
收藏
得分:0 
以下是引用吹水佬在2018-3-13 19:43:09的发言:


主要部份:
** thisform.myClick 自定义表单方法,点击表格各栏目排序
LOCAL aCol[1], cmd
IF (AEVENTS(aCol,0) > 0)
    IF (VARTYPE(aCol[1])=="O") AND (PROPER(aCol[1].BaseClass)=="Header")
        cmd = "SELECT * FROM cp2013 ORDER BY " +;
            JUSTEXT(aCol[1].Parent.ControlSource) +;
            IIF(this.Ascending, " ASC ", " DESC ") +;
            "INTO CURSOR grid1_tmp"
        this.grid1.RecordSource = ""
        USE IN "grid1_tmp"
        EXECSCRIPT(cmd)
        this.grid1.RecordSource = "grid1_tmp"
        this.grid1.SetFocus
        this.Ascending = !this.Ascending &&自定义表单属性Ascending,升降序切换
    ENDIF
ENDIF

** thisform.Init
SELECT * FROM cp2013 INTO CURSOR grid1_tmp
this.grid1.recordsource = "grid1_tmp"
FOR EACH oColumn IN this.grid1.Columns
    BINDEVENT(oColumn.Header1, "Click", this, "myClick")
ENDFOR


正真的高手,学习了,谢谢

只求每天有一丁点儿的进步就可以了
2018-03-14 08:36
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:0 
我以前在这个论坛上看到1个,在GRID标题栏上有个图片的,向上,向下的箭头
2018-03-14 10:22
jinnee99
Rank: 1
等 级:新手上路
帖 子:17
专家分:5
注 册:2013-10-12
收藏
得分:0 
点击排序.rar (21.4 KB)

再请吹水大神看看,我按照大神给的代码变换了一下,但发生了一个错误,(临时表名)必须由select ...into table 创建
个人猜测:
错误应该是是this.RecordSource =mCursor产生的
因为默为的数据源是"别名",所以this.RecordSource =mCursor会认为是字段名
修改成
       mCmd="select *from "+mCursor+" order by "+mField+" into cursor "+mCursor
       this.recordsourcetype=4
       this.RecordSource =mCmd
      后倒是不报错了,但数据是空的
请教该如何解决

[此贴子已经被作者于2018-3-14 13:12编辑过]

2018-03-14 12:50
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10527
专家分:42899
注 册:2014-5-20
收藏
得分:0 
试了一下 recordsourcetype=4 好象无什么异常
新建文件夹.rar (3.42 KB)

** thisform.myClick 自定义表单方法,点击表格各栏目排序
LOCAL aCol[1]
IF (AEVENTS(aCol,0) > 0)
    IF (VARTYPE(aCol[1])=="O") AND (PROPER(aCol[1].BaseClass)=="Header")
        this.grid1.RecordSource = "SELECT * FROM cp2013 ORDER BY " +;
            JUSTEXT(aCol[1].Parent.ControlSource) +;
            IIF(this.Ascending, " ASC ", " DESC ") +;
            "INTO CURSOR grid1_tmp READWRITE"
        this.grid1.SetFocus
        this.Ascending = !this.Ascending &&自定义属性Ascending,升降序切换
    ENDIF
ENDIF

** thisform.Init
this.grid1.RecordSourceType = 4
this.grid1.RecordSource = "SELECT * FROM cp2013 INTO CURSOR grid1_tmp READWRITE"
FOR EACH oColumn IN this.grid1.Columns
    BINDEVENT(oColumn.Header1, "Click", this, "myClick")
ENDFOR
2018-03-14 14:47
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:0 
回复 9楼 吹水佬
吹版,在GRID的标题上用1个图片,显示当前的排序是向上还是向下的,怎么做.我以前看到有,忘了在哪里
2018-03-14 14:54
快速回复:请教坛中大神一个关于grid表点击表头排序的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016995 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved