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

这是程序
附件: 您没有浏览附件的权限,请 登录注册
2018-03-13 15:47
wengjl
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:58
帖 子:1374
专家分:2553
注 册:2007-4-27
  得分:2 
附件: 您没有浏览附件的权限,请 登录注册

只求每天有一丁点儿的进步就可以了
2018-03-13 17:37
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:157
帖 子:6127
专家分:26761
注 册:2014-5-20
  得分:17 

主要部份:
** 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: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:58
帖 子:1374
专家分:2553
注 册: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
等 级:版主
威 望:79
帖 子:2555
专家分:6258
注 册:2015-3-25
  得分:0 
我以前在这个论坛上看到1个,在GRID标题栏上有个图片的,向上,向下的箭头
2018-03-14 10:22
jinnee99
Rank: 1
等 级:新手上路
帖 子:17
专家分:5
注 册:2013-10-12
  得分:0 

再请吹水大神看看,我按照大神给的代码变换了一下,但发生了一个错误,(临时表名)必须由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
等 级:版主
威 望:157
帖 子:6127
专家分:26761
注 册:2014-5-20
  得分:0 
试了一下 recordsourcetype=4 好象无什么异常

** 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
等 级:版主
威 望:79
帖 子:2555
专家分:6258
注 册:2015-3-25
  得分:0 
回复 9楼 吹水佬
吹版,在GRID的标题上用1个图片,显示当前的排序是向上还是向下的,怎么做.我以前看到有,忘了在哪里
2018-03-14 14:54







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

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