关于MSHFlexGrid控件的一个疑问??

lovessll 2010-04-14 03:45:01
我现在做用MSHFlexGrid控件做了一个数据库的链接。当我点击MSHFlexGrid的某一行时,使数据显示在文本框中。但现在遇到一个奇怪的问题(以前用的时候从来没遇到过)。
当我点击某一行的时候,文本框里显示的是前一行的内容。也就是说我点击鼠标第3行时显示的是第2行的内容。这样有个问题就是最后一行总显示不了。这是什么原因啊。
有遇到过这样现象的朋友吗?怎么解决啊!
很着急,在线等!
Private Sub MSHFlexGrid1_Click()
for i= 1 to 10
text1(i).text= MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, i)
next
...全文
173 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
yachong 2010-04-15
  • 打赏
  • 举报
回复
这个控件绑定数据库的时候,如果RecordSet里面一条记录都没有,就会出现稀奇古怪的问题
一个BUG
yangxie5201314 2010-04-15
  • 打赏
  • 举报
回复
单步调试下MSHFlexGrid.Row,看看数值在哪里发生了变化
lovessll 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 yangxie5201314 的回复:]
此前我也遇到我MSHFlexGrid莫名其妙的问题,后来打上了补丁,解决了,你可以试一试
[/Quote]
这个我已经装过了,还是那个问题!
我现在觉得这可能是MSHFlexGrid本身的问题。当数据全部被删光,重新添加时就会出现这个问题。
我试了很多次都是如此
大家看看这个问题怎么解决啊!
yangxie5201314 2010-04-15
  • 打赏
  • 举报
回复
此前我也遇到我MSHFlexGrid莫名其妙的问题,后来打上了补丁,解决了,你可以试一试
yangxie5201314 2010-04-15
  • 打赏
  • 举报
回复
vb SP6补丁,补丁?没听过?
lovessll 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 yangxie5201314 的回复:]
打SP6补丁,没打SP6补丁的MSHFlexGrid是有问题的
[/Quote]
这个怎么讲?楼上的能说详细些吗
yangxie5201314 2010-04-15
  • 打赏
  • 举报
回复
打SP6补丁,没打SP6补丁的MSHFlexGrid是有问题的
yangxie5201314 2010-04-15
  • 打赏
  • 举报
回复
你在双击事件的时候获取索引了吧?
lovessll 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 of123 的回复:]
用法有问题。

1 MSHFlexGrid 是个显示控件,不会更改你的数据,所以没有必要关闭绑定连接。

Private Sub Form_Load()
Call Link
rs.Open "select * from 表1", cn, adOpenKeyset, adLockOptimistic
Set MSHFlexGrid1.DataSource = rs
' rs.……
[/Quote]
楼上的朋友,用的这个还是不行。当我用删除命令把记录全删除,然后再添加的时候还是会出现我说的那个问题就是点击第二行光标会在第一行。最后一行必须点到表的最下端表外才可以选上。这是什么原因?大家帮忙解决一下。
of123 2010-04-15
  • 打赏
  • 举报
回复

用法有问题。

1 MSHFlexGrid 是个显示控件,不会更改你的数据,所以没有必要关闭绑定连接。

Private Sub Form_Load()
Call Link
rs.Open "select * from 表1", cn, adOpenKeyset, adLockOptimistic
Set MSHFlexGrid1.DataSource = rs
' rs.Close
' cn.Close
' Set rs = Nothing
' Set cn = Nothing
End Sub

2 利用绑定,单击单元格后,数据游标会自动迁移,你可以直接从记录集中取数据,不必重新查询。

Private Sub MSHFlexGrid1_RowColChange()
For i = 0 To 8
Text1(i).Text = rs.Fields(i)
Next
End If
liguicd 2010-04-14
  • 打赏
  • 举报
回复
微软自带的MSHFlexGrid感觉用起来很不爽
lovessll 2010-04-14
  • 打赏
  • 举报
回复
我现在还发现,如果用删去功能把表格的数据全部删除?再添加记录,这时也会出现那种情况,就是点击第二行时显示的是第一行。依此类对。这个是怎么回事啊?
  • 打赏
  • 举报
回复
试试refresh一下。
绑定的米用过。
lovessll 2010-04-14
  • 打赏
  • 举报
回复
更正:"启动时先把数据库的数据情况,然后用界面的添加命令添加数据"应该为:
启动时先把数据库的数据清空,然后用界面的添加命令添加数据

lovessll 2010-04-14
  • 打赏
  • 举报
回复
我把对比的情况说详细些。
正常的情况:界面中一个命令按钮,一个MSHFlexGrid表格框,9个文本框
Private Sub Form_Load()
Call Link
rs.Open "select * from 表1", cn, adOpenKeyset, adLockOptimistic
Set MSHFlexGrid1.DataSource = rs
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub

Private Sub MSHFlexGrid1_Click()
Dim i As Integer
For i = 0 To 8
Text1(i).Text = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, i)
Next
End Sub
其中 link是链接数据库的函数。运行一切正常。鼠标停留的也对。点击第一行,第一行出现光标框,文本框显示第一行的数据,其他依次类推,没有任何问题

不正常的情况
Private Sub Form_Load()
Call Link
cn.Execute ("delete from 表1")
rs.Open "select * from 表1", cn, adOpenKeyset, adLockOptimistic
Set MSHFlexGrid1.DataSource = rs
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
启动时先把数据库的数据情况,然后用界面的添加命令添加数据
Private Sub ComAdd_Click()
rs.Open "select * from 表1 where 名称='" & text1(0).Text & "'", cn, adOpenKeyset, adLockOptimistic
If rs.RecordCount = 0 Then
rst.Open "select * from 表1", cn, adOpenKeyset, adLockOptimistic
rst.AddNew
For i = 0 To 8
rst.Fields(i) = text1(i).Text
Next
rst.Update
rst.MoveLast
Else
MsgBox "很抱歉,该名称已经存在,请查询确认后重新输入!", vbOKOnly + vbExclamation, "添加"
Exit Sub
End If

End Sub
添加完毕后,MSHFlexGrid1显示数据库中新添加的数据。(我尝试了很多次,添加了很多条数据)
然后点击MSHFlexGrid1。点击代码如下
Private Sub MSHFlexGrid1_Click()
Dim i As Integer
For i = 0 To 8
Text1(i).Text = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, i)
Next
End Sub

这时候就会出现我所描述的现象。光标总是差一行。点击第3行显示的是第2行的数据……最后一行无法点击!
大家看看这个问题怎么解决!
vbman2003 2010-04-14
  • 打赏
  • 举报
回复
MSHFlexGrid1.MouseRow就是鼠标当前行,如果没有其它代码,还不实现你的要求,你删除了这个控件重新添加一个默认属性下试一下....
lovessll 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 vbman2003 的回复:]
VB code

Private Sub MSHFlexGrid1_Click()
dim i as long
dim r as long
r=MSHFlexGrid1.MouseRow
for i= 1 to 10
text1(i).text= MSHFlexGrid1.TextMatrix(r, i)
next
end ……
[/Quote]
楼上的朋友,还是不行。每次我用鼠标点击的时候,光标总是会向上一行。
vbman2003 2010-04-14
  • 打赏
  • 举报
回复

Private Sub MSHFlexGrid1_Click()
dim i as long
dim r as long
r=MSHFlexGrid1.MouseRow
for i= 1 to 10
text1(i).text= MSHFlexGrid1.TextMatrix(r, i)
next
end sub
饮水需思源 2010-04-14
  • 打赏
  • 举报
回复
看看第0行是不是设置成.fixedrows固定行了
lovessll 2010-04-14
  • 打赏
  • 举报
回复
但我以前用的时候就是好的啊!
我对比了一下以前的操作。
以前的数据库是有很多的数据,界面启动的时候mshflexgrid1直接与数据库链接。这时候点击就没有任何问题,一切正常。
我现在是界面启动的时候先把数据库清空啦,里面没有记录。我在界面中添加数据,保存到数据库中,mshflexgrid1显示数据库中的数据(表的形式显示)。这时候我再点击mshflexgrid1表是,就会出现点击第2行光标停在第1行,显示的是第一行里的数据。这是为什么啊
恳请朋友帮忙解决一下
加载更多回复(1)

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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