| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1200 人关注过本帖
标题:问一个组合框的问题
只看楼主 加入收藏
总是出错
Rank: 2
等 级:论坛游民
威 望:1
帖 子:248
专家分:24
注 册:2012-12-24
结帖率:73.47%
收藏
已结贴  问题点数:20 回复次数:19 
问一个组合框的问题
有两个表A,B.A表只有一个字段,简称A1,无重复值,B 表有两个字段,B1,B2.
其中B1字段和A表中A1完全一样,有重复值。
设置二个组合框,K1,K2
K1 值的来源为A表,在K1的INTERACTIVECHANGE 中,写入如下代码
SELE  B表
SET FILTER TO B1=THIS.K1.VALUE
此时表B过滤,只有在字段B1=K1值的时候才显示。
但是,在点击组合框时,却直显示符合K1值的第一条记录。
问题出在什么地方?
搜索更多相关主题的帖子: 记录 
2013-04-16 21:32
总是出错
Rank: 2
等 级:论坛游民
威 望:1
帖 子:248
专家分:24
注 册:2012-12-24
收藏
得分:0 
点击组合框K2时
2013-04-16 21:33
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:7 
参考下面的示例
程序代码:
FORM1= NEWOBJECT("C_FORM")
FORM1.SHOW
READ EVENTS
RETURN
DEFINE CLASS C_FORM AS FORM
   AUTOCENTER=.T.
   CAPTION="组合框查询示例一"
   SHOWTIPS=.T.
   ADD OBJECT LABEL1 AS LABEL WITH AUTOSIZE=.T.,CAPTION="部门",TOP=16,LEFT=10,HEIGHT=28,WIDTH=40
   ADD OBJECT COMBO1 AS COMBOBOX WITH TOP=6,LEFT=40,HEIGHT=24 
   ADD OBJECT LABEL2 AS LABEL WITH AUTOSIZE=.T.,CAPTION="部门代码",TOP=16,LEFT=152,HEIGHT=28,WIDTH=40
   ADD OBJECT COMBO2 AS COMBOBOX WITH TOP=6,LEFT=205,HEIGHT=24 
   ADD OBJECT GRID1 AS GRID WITH TOP=((THISFORM.HEIGHT-THISFORM.GRID1.HEIGHT)/2)+20,LEFT=(THISFORM.WIDTH-THISFORM.GRID1.WIDTH)/2
   PROCEDURE INIT
      *---部门
      CREATE CURSOR 部门 (部门名称 C(10))
      INSERT INTO 部门 VALUES ("参谋处")
      INSERT INTO 部门 VALUES ("作战处")
      INSERT INTO 部门 VALUES ("通讯处")
      *---部门代码
      CREATE CURSOR 部门代码 (部门名称 C(10),班组名称 C(10))
      INSERT INTO 部门代码 VALUES ("参谋处","参谋一处")
      INSERT INTO 部门代码 VALUES ("参谋处","参谋二处")
      INSERT INTO 部门代码 VALUES ("作战处","作战一处")
      INSERT INTO 部门代码 VALUES ("作战处","作战二处")
      INSERT INTO 部门代码 VALUES ("通讯处","通讯一处")
      INSERT INTO 部门代码 VALUES ("通讯处","通讯二处")
      *---人员资料
      CREATE CURSOR 人员资料 (班组名称 C(10),姓名 C(8))
      INSERT INTO 人员资料 VALUES ("通讯二处","AAAAAA")
      INSERT INTO 人员资料 VALUES ("作战一处","BBBBBB")
      INSERT INTO 人员资料 VALUES ("参谋一处","CCCCCC")
      INSERT INTO 人员资料 VALUES ("作战二处","DDDDDD")
      INSERT INTO 人员资料 VALUES ("通讯一处","EEEEEE")
      INSERT INTO 人员资料 VALUES ("参谋二处","FFFFFF")
      GO TOP IN 部门代码
      THISFORM.CX("部门代码")
      WITH ="部门.部门名称"
         .ROWSOURCETYPE=6
      ENDWITH
   ENDPROC
   PROCEDURE COMBO1.INTERACTIVECHANGE
      SELECT 部门名称,班组名称 FROM 部门代码 WHERE ALLTRIM(部门名称)==ALLTRIM() INTO CURSOR TABNAME
      WITH =2
         .COLUMNWIDTHS="40,60"
         .ROWSOURCE="TABNAME"
         .ROWSOURCETYPE=2
         .DISPLAYVALUE=ALLTRIM(.LIST(1,2)) && 显示COMBO2的值
         .REQUERY
      ENDWITH
      THISFORM.CX("TABNAME")
   ENDPROC
   PROCEDURE COMBO2.INTERACTIVECHANGE
      THIS.DISPLAYVALUE=THIS.LIST(THIS.LISTITEMID,2) && 修改COMBO2的值
      SELECT 人员资料
      SET FILTER TO INLIST(ALLTRIM(班组名称),ALLTRIM())
      GO TOP IN 人员资料
      THISFORM.CX("人员资料")
      THISFORM.GRID1.REFRESH
   ENDPROC
   PROCEDURE CX
   PARAMETERS CALIAS
      WITH THISFORM.GRID1
           .COLUMNCOUNT=FCOUNT(CALIAS)
           .RECORDSOURCE=CALIAS
           .RECORDSOURCETYPE=1
           FOR I=1 TO .COLUMNCOUNT
               .COLUMNS(I).HEADER1.CAPTION=FIELD(I,CALIAS)
               .COLUMNS(I).HEADER1.ALIGNMENT=2
               .COLUMNS(I).WIDTH=62
           ENDFOR
      ENDWITH
   ENDPROC  
*!*       PROCEDURE DESTROY
*!*          CLEAR EVENTS
*!*       ENDPROC
   PROCEDURE UNLOAD
      CLEAR EVENTS
      ON SHUTDOWN QUIT
   ENDPROC
ENDDEFINE
可能是组合框K2的数据源没被刷新(REQUERY)的原因吧


[ 本帖最后由 sdta 于 2013-4-17 10:11 编辑 ]

坚守VFP最后的阵地
2013-04-16 21:52
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:7 
在K1的INTERACTIVECHANGE 中,写入如下代码(
SET FILTER TO ALLTRIM(B1)==ALLTRIM(A表.A1) IN B表 &&不要用 this.value 不然点 K2时会出错
GO TOP IN B表
THISFORM.K2.Requery
THISFORM.K2.Value=B表.B1
2013-04-16 22:46
总是出错
Rank: 2
等 级:论坛游民
威 望:1
帖 子:248
专家分:24
注 册:2012-12-24
收藏
得分:0 
应该不是
把同样的代码,写入K2获得焦点时,还是只显示第一条记录。但是此时打开B表,可以清楚看到,过滤命令已经生效。
2013-04-16 22:50
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
说不清楚,就上传表单吧

坚守VFP最后的阵地
2013-04-16 22:53
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:7 
楼主,你试下:
K2.Init代码:
WITH This
   .RowSourceType= 3
   .RowSource=[SELECT 字段名 FROM B ;
                    WHERE 字段名=A.相关字段名 ;
                    INTO CURSOR TEMP]
   .DisplayValue=A.相关字段名
ENDWITH

K1.InterActiveChange代码:
WITH Thisform.K2
   .RowSourceType= 3
   .RowSource=[SELECT 字段名 FROM T2 ;
                    WHERE 字段名=This.DisplayValue ;
                    INTO CURSOR TEMP]
   .DisplayValue=IIF(RECCOUNT("TEMP")>0,This.DisplayValue,"")
ENDWITH
这样,你点击K1框改变值时,K2框可以联动。我在FoxPro 9.0中测试通过,你试试附件。附件中,我是以两个表的Xm字段来匹配联动的。T1和T2分别相当于你案例中的A、B两表。
FoxPro.rar (3.02 KB)

在T1.Xm中,值为Xm1-Xm39,无重复;T2.Xm中,Xm1、3、8、16、30有重复值,其它值为一个或零个。当T1.Xm中的值不包含在T2.Xm中时,K2将显示空白。


[ 本帖最后由 taifu945 于 2013-4-17 09:14 编辑 ]
2013-04-17 09:07
总是出错
Rank: 2
等 级:论坛游民
威 望:1
帖 子:248
专家分:24
注 册:2012-12-24
收藏
得分:0 
好像过滤命令对组合框无效。
2013-04-20 11:09
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
有效呀,你的代码是怎么的?你的问题还未解决吗?
2013-04-20 11:12
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用总是出错在2013-4-20 11:09:36的发言:

好像过滤命令对组合框无效。

不要用SET FILTER TO命令,按我示例中的方法就行。代码也简单易懂。
2013-04-20 11:42
快速回复:问一个组合框的问题
数据加载中...
 
   



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

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