如何在两个grid间传递数据?

huahaiqq 2008-08-02 08:50:15
比如说俺的一个form中包含两个grid,grid1是临时表做数据源的,grid2是与有数据的表绑定的,请问俺应该如何通过单击把grid2被单击的那行数据显示到grid1的活动行中??谢谢!!
...全文
112 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
都市夜猫 2008-08-02
  • 打赏
  • 举报
回复
把两个表的结构及需要对应的字段列出来看看
huahaiqq 2008-08-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dkfdtf 的回复:]
如果 grid1 所绑定临时表与 grid2 所绑定的有数据表只是字段名不同,而类型和字段数相同的话,用数组也可以:

select grid2数据源表
scatter to aTemp
select grid1数据源表
if eof()
append blank
endif
gather from aTemp

关键是你要告诉我们这两表的结构才好写代码
[/Quote]
谢谢!两个表的字段名和类型都是不同的,但俺只要其中的字符型字段对应就够了哦~~谢谢~~
都市夜猫 2008-08-02
  • 打赏
  • 举报
回复
如果 grid1 所绑定临时表与 grid2 所绑定的有数据表只是字段名不同,而类型和字段数相同的话,用数组也可以:

select grid2数据源表
scatter to aTemp
select grid1数据源表
if eof()
append blank
endif
gather from aTemp

关键是你要告诉我们这两表的结构才好写代码
huahaiqq 2008-08-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 unlist 的回复:]
select grid2数据源表
scat memv
m.grid1异同字段=grid2异同字段
insert into grid1临时表 from memv
[/Quote]
谢谢!!~~这个方法可就是可以用,但却是在原来的基础上增加了行数,请问有啥更好的方法,直接加进去,而不增加行数?
unlist 2008-08-02
  • 打赏
  • 举报
回复
select grid2数据源表
scat memv
m.grid1异同字段=grid2异同字段
insert into grid1临时表 from memv
十豆三 2008-08-02
  • 打赏
  • 举报
回复
在Grid2的AfterRowColChange事件加代码
LPARAMETERS nColIndex &&系统代码
Select T1 &&或 Select (Thisform.Grid1.Recordsource)
Locate For 字段名A=T2.字段名B &&类型相同即可,类型不同转换成相也可,如字段名A=Val(T2.字段名B)
Thisform.Grid1.Refresh
huahaiqq 2008-08-02
  • 打赏
  • 举报
回复
哦,谢谢十豆三大哥,但俺的两个字段名不同啊,用不了,有没其它啥办法了?
十豆三 2008-08-02
  • 打赏
  • 举报
回复
对两个Grid的数据源表操作即可,如Grid1的数据源表为T1,Grid2的数据源表为T2,而且这两个表中有相同字段,


当单击Grid2时,Grid1显示与Grid2当前行某字段一样的记录:

在Grid2的AfterRowColChange事件加代码
LPARAMETERS nColIndex &&系统代码
Select T1 &&或 Select (Thisform.Grid1.Recordsource)
Locate For 字段名=T2.字段名
Thisform.Grid1.Refresh
huahaiqq 2008-08-02
  • 打赏
  • 举报
回复
嗯,解决了!谢谢都市夜猫以及各位大哥的热心帮忙!谢谢!!!
都市夜猫 2008-08-02
  • 打赏
  • 举报
回复
如果你的 grid2 不需要做数据修改,将 gird2.AllowCellSelection 设为 .F.,就可以在 grid2.DblClick 中写代码了。

否则 grid 中的 text1 将得到双击事件而不是 grid2 得到,这样除非你在每列的 Text1.DblClick 中写代码,或者将它们全部绑定到 grid2.DblClick 事件上才行
huahaiqq 2008-08-02
  • 打赏
  • 举报
回复
en,谢谢!!!刚刚没看到您发的14喽那些代码,俺新建了个窗体就可以了,果然如您所料,是其它代码导致的吧。
为啥那写代码要加在grid2的AfterRowColChange事件中才行了,俺想加在grid2的doubleclick事件中却不行啊,
怎么办啊??!
都市夜猫 2008-08-02
  • 打赏
  • 举报
回复
vfp9 的 grid 没有这种 bug, 应该是你的其它地方有代码导致了 grid1 绑定的临时表记录重新回到了首记录
都市夜猫 2008-08-02
  • 打赏
  • 举报
回复
14 楼的代码也不行?
huahaiqq 2008-08-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 dkfdtf 的回复:]
不会吧?grid1 中点中哪行,则临时表的当前记录就会移动到哪行,更新的也就是这一记录所在的行

否则就是你用的 vfp 版本存在 bug
[/Quote]

还是不行啊,俺用的是9.0。每次点grid2时,都只是grid1的第一行得到数据,再选中grid1的其它行,再点击grid2,还是grid1的第一行获得grid2的数据,哎~~晕了~~~救救俺吧,谢谢~~~~
都市夜猫 2008-08-02
  • 打赏
  • 举报
回复

如果你用的 vfp 版本的 grid 真的存在此 bug,可以加些代码来避免:

1. 新建一个表单属性 CurRec(缺省值 0),或者声明一个全局变量 public giCurRec
2. 在 Grid1 的 AfterRowColChange 事件中写代码:
Thisform.CurRec = recno( This.RecordSource )
-- or --
giCurRec = recno( This.RecordSource )
3. 前面的代码改为:
select grid2数据源表
txt1 = tt1
txt2 = tt2
txt3 = tt3
select grid1数据源表
goto ( Thisform.CurRec ) && goto ( m.giCurRec )
gather memvar fields like txt*
都市夜猫 2008-08-02
  • 打赏
  • 举报
回复
不会吧?grid1 中点中哪行,则临时表的当前记录就会移动到哪行,更新的也就是这一记录所在的行

否则就是你用的 vfp 版本存在 bug
huahaiqq 2008-08-02
  • 打赏
  • 举报
回复
en~~谢谢!!!可以了,但就是老是局限在grid1的第一行上,点grid2哪行就显示grid2的哪行,
有没什么办法改一下,让grid1在不增加行数的基础上,又能在任意选中行上显示grid2点击行的数据呢??
谢谢哦!!!
都市夜猫 2008-08-02
  • 打赏
  • 举报
回复
select grid2数据源表
txt1 = tt1
txt2 = tt2
txt3 = tt3
select grid1数据源表
if eof()
append blank
endif
gather memvar fields like txt*
都市夜猫 2008-08-02
  • 打赏
  • 举报
回复
select grid2数据源表
scatter memvar
txt1 = tt1
txt2 = tt2
txt3 = tt3
select grid1数据源表
if eof()
append blank
endif
gather memvar
huahaiqq 2008-08-02
  • 打赏
  • 举报
回复
额,临时表1 &&表名1 表2 &&表名2
&&字段 &&字段

txt1,字符型 tt1,字符型
txt2,字符型 tt2,字符型
txt3,字符型 tt3,字符型


临时表1是空白的临时表,而表2是有数据的
要求把grid2的tt1对应grid1的txt1
tt2对应txt2.......
麻烦了哦!!!

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧