MSHFLEXGRID的焦点问题,困绕很久的问题!!!!!解决者大分相送

zhaojunliang 2005-11-16 11:58:24
前提,窗体启动,我用MSHFLEGRID控件显示数据;可以一行一行的选中。
问题,我做查询的时候,第一次结果为空,紧接着进行第二次查询,比如查询结果为5条记录,这时,用鼠标单击某一行就选不中了;焦点老是跑到最前面的那行固定行上。
怎么能在第二次查询后,能够选中某一行。
...全文
513 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaojunliang 2005-11-18
  • 打赏
  • 举报
回复
楼上说的对,我就是用绑定的;我觉得也是此控件的BUG。
aohan 2005-11-17
  • 打赏
  • 举报
回复
你给的代码应该不全吧,不知道你是否用了绑定的方法给MSHFlexGrid1赋值,如果用了这种方法那么问题就很显而易见了,当用空的记录集给MSHFlexGrid绑定赋值时MSHFlexGrid就会出现你所说的现象,这也是MSHFlexGrid的BUG,如果要避免出现这种问题,你可以用两个记录集对MSHFlexGrid赋值,先判断第一个记录集是否为空,如果不为空再打开第二个记录集赋给MSHFlexGrid

类似用这样的方法:
rs.open strsql ,cn,1,3
if not rs.eof
rs1.open strsql,cn,1,3
set MSHFlexGrid.datasource=rs1
rs1.close
set rs1=nothing

end if
rs.close
set rs=nothing
射天狼 2005-11-16
  • 打赏
  • 举报
回复
MSFlexGrid1.SelectionMode = flexSelectionByRow
winehero 2005-11-16
  • 打赏
  • 举报
回复
什么意思?MSHFlexgrid.row=你想要定位的行,不行吗?
vbman2003 2005-11-16
  • 打赏
  • 举报
回复

fg.SelectionMode = flexSelectionByRow
fg.toprow=你要固定的行
zhaojunliang 2005-11-16
  • 打赏
  • 举报
回复
去掉也不行,我不调用showtitle也不行
winehero 2005-11-16
  • 打赏
  • 举报
回复
还说没有,在你那个叫showTitle最后又一个
......
.Col = 1
.Row = 0 '这句你把Row焦点移到固定行了
.Redraw = True

这不是将行变为固定行是什么?!
zhaojunliang 2005-11-16
  • 打赏
  • 举报
回复
应该没有呀,我的代码如下:
If Check1.Value = 1 Then
If Trim(CBSSHY.Text) = "" Then
MsgBox "请选择查询条件!", vbOKOnly + vbExclamation, "系统提示"
CBSSHY.SetFocus
Exit Sub
Else
strsql = "select xxbh,gsdw,fbrq,sshy from zpxx where sshy='" & Trim(CBSSHY.Text) & "'order by xxbh"
Frm_zpxx.Adodc1.RecordSource = strsql
Frm_zpxx.Adodc1.Refresh
Call showTitle〈----------------------------|
Frm_zpxx.MSHFlexGrid1.Refresh |
Unload Me |
End If |
End If |
Private Sub showTitle()〈-------------------------|
Dim i As Integer
Dim l As Integer
Dim cRowColor(1) As OLE_COLOR
With Frm_zpxx.MSHFlexGrid1
.Cols = 3
'列宽
.TextMatrix(0, 0) = "信息编号"
.TextMatrix(0, 1) = "公司/单位名称"
.TextMatrix(0, 2) = "发布日期"

.ColWidth(0) = "900"
.ColWidth(1) = "2500"
.ColWidth(2) = "1000"

.RowHeightMin = 280
' .ColAlignment = 4
'固定表头
'.FixedRows = 1
'.FixedCols = 0
'设置各列的对齐方式
For i = 0 To 2
.Col = i
.Row = 0
.CellAlignment = 4
'.CellBackColor = RGB(0, 128, 128)
Next i
cRowColor(0) = RGB(211, 211, 211)
cRowColor(1) = RGB(255, 255, 224)
.Redraw = False
.FillStyle = flexFillRepeat
For l = 1 To .Rows - 1
.TextMatrix(l, 2) = Format(.TextMatrix(l, 2), "yyyy-mm-dd")
' .TextMatrix(l, 13) = Format(.TextMatrix(l, 13), "yyyy-mm-dd")
.Col = 0
.Row = l
.ColSel = .Cols - 1
.RowSel = l
.CellBackColor = cRowColor(l Mod 2)
Next
.FillStyle = flexFillSingle
.Col = 1
.Row = 0
.Redraw = True
End With
End Sub
射天狼 2005-11-16
  • 打赏
  • 举报
回复
如果还是不行,估计是你查询的时候更改表格的其他属性了。
window32 2005-11-16
  • 打赏
  • 举报
回复
我一般用 Anylib,你可以到它的主页看看
http://www.anylib.com
bitzl210 2005-11-16
  • 打赏
  • 举报
回复
你每次查完以后,让你MSHFLEXGRID.col=0 mshflexgrid.row=0

zhaojunliang 2005-11-16
  • 打赏
  • 举报
回复
以上的方法我试了,还是不行。
northwolves 2005-11-16
  • 打赏
  • 举报
回复
MSHFlexGrid1.Refresh
winehero 2005-11-16
  • 打赏
  • 举报
回复
SelectionMode默认是FlexSelectionFree,要有个高亮行选择方式用FlexSelectionByRow。参照MSDN如下。。。 不过还是怀疑你是不是这个问题?
______________________________________
SelectionMode 属性


返回或设置一个值,决定一个 MSHFlexGrid 是否应该允许正常的单元选择、按行选择或按列选择。

语法

object.SelectionMode [=value]

SelectionMode 属性的语法包含如下部分:

部分 描述
object 一个对象表达式,其值为“应用于”列表中的一个对象。
value 一个整数或常数,指定选择方式。如设置值中所述。


设置值

value 的设置值如下所示:

常数 值 描述
FlexSelectionFree 0 自由。允许选择 MSHFlexGrid 中的个别单元,电子数据表风格。这是缺省设置值。
FlexSelectionByRow 1 按行。强制跨越整个行选择,如在一个多列列表框或基于记录的显示。
FlexSelectionByColumn 2 按列。强制跨越整个列选择,如同为图表选择范围或者是为排序选择字段。

7,763

社区成员

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

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