100分.急!关于MSHFlexGrid中显示数据的问题
在网上找到一个类似的问题.原帖如下
http://topic.csdn.net/t/20051116/11/4396875.html
前提,窗体启动,我用MSHFLEGRID控件显示数据;可以一行一行的选中。
问题,我做查询的时候,第一次结果为空,紧接着进行第二次查询,比如查询结果为5条记录,这时,用鼠标单击某一行就选不中了;焦点老是跑到最前面的那行固定行上。
怎么能在第二次查询后,能够选中某一行。
原帖提拱的办法
如果要避免出现这种问题,你可以用两个记录集对MSHFlexGrid赋值,先判断第一个记录集是否为空,如果不为空再打开第二个记录集赋给MSHFlexGrid
想问各位高人.除了这个办法,还有没有其它的解决方案?
因为我这需要如果记录为空,你可以添加数据.
[解决办法]
调用前先Clear一下然后初始化一下grid标题
With Me.MSHFlexGrid1
.clear
.TextMatrix(0, 0) = "编号 "
.TextMatrix(0, 1) = "行为 "
.ColWidth(0) = 500
.ColWidth(1) = 2000
end with
我用着是没有什么问题
[解决办法]
用“绑定”的方法,会有很多限制和你意想不到的问题。
功能上只能实现很简单的任务。
而且也不是专业人员所为啊。
建议:
去掉绑定,用代码来进行控制:
1)连接数据库
2)取数据
3)关闭数据库连接
然后随意设置跳到哪一行。
注意:
跳转的时候要用:“If XXX.Rows > 1 Then XXX.Row = 1”
[解决办法]
添加类似如下代码,适当修改,
if 记录=null then
'add data
adodc1.add "xx " "
adodc1.add "yy "
adodc1.updata
adodc1.refresh
'then read data to MSHFlexGrid1
这个你就会了```
用控件datagrid测试类似问题成功.
[解决办法]
这个问题我也碰到过,我也觉得是mshflexgrid的bug
一般来说我是这么解决:
rs=查询
if rs.eof and rs.bof ' ' ' '如果查询结果为空,就不要绑定
mshflexgrid1.clear
mshflexgrid1.rows=2
' ' '还可以写一些设置标题、对齐之类的语句
else
set mshflexgrid1.datasource=rs
endif
比如这样:
Private Sub Command1_Click()
Set MSHFlexGrid1.DataSource = Nothing
Adodc1.RecordSource = "select * from c401 where 课程编号 like ' " & Text1 & "% ' "
Adodc1.Refresh
If Adodc1.Recordset.EOF And Adodc1.Recordset.BOF Then
MSHFlexGrid1.Clear
MSHFlexGrid1.Rows = 2
'这里需要添加一些修改MSHFlexGrid1外观的语句
Else
Set MSHFlexGrid1.DataSource = Adodc1.Recordset
End If
End Sub
无论使用adodc控件还是直接定义Recordset对象都可以用这个方法