在机房收费系统,学生基本信息维护窗体中涉及到一个对MSHFlexGrid选中行进行修改的行,那么这个应该怎么实现呢?
自己在开始的走了不少的弯路,刚开始以为自己实现了,其实不是只是一个偶然的现象,自己刚开始是这样写的:
第一次:
将MSHFlexGrid的属性“SelectionMode”中选中的是第1项,之后在“修改”命令按钮的代码中写到了:
txtsql="select * from student_info where cardID='" & MSHFlexGrid1. SelectionMode & "'"
Set reSI = ExecuteSQL(txtsql, msgtext)
这时巧了,确实是出现了,我以为就这样可以实现了,可是当我再点击第二行的时候,它就显示不出来了,后来通过把MSHFlexGrid的属性“SelectionMode”中选中了第2项,这时发现一直显示的是某一行,即鼠标指到的变蓝的地方的第一行,于是开始查找资料,了解关于MSHFlexGrid的一些属性,其中MSHFlexGrid的属性“SelectionMode”第一项“0-flexselectionfree”是自由选择;第二项“1-selectionbyrow”是按照行来说,也就是它对应的行号,而不是哪一种的某个字段的名字,所以我的出错也就可想而知了,不过如果你的第一行记录的卡号恰好是1,那么就会出现我的现象,正好可以出现你想要的那种结果,但是我们不应该抱有这样侥幸的心理;第三项“2-flexselectioncolnm”当然就是按照列的显示,而卡号是无法与你一一对应的,唯一的一个就是2号,所以无论你怎么选择,它总是选中第二行。
于是开始查找资料,看看到底应该怎么做:
Option Explicit
Dim SelectROW As Integer
Private Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
With MSHFlexGrid1
.Row = .MouseRow
SelectROW = .Row
.Col = 0
.ColSel = .Cols - 1
End With
End Sub
Private Sub MSHFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
With MSHFlexGrid1
.RowSel = SelectROW
.ColSel = .Cols - 1
End With
End Sub
之后在修改命令按钮中选择选中行,对其进行修改:
Private Sub Command1_Click()
Dim txtsql As String
Dim msgtext As String
Dim reSI As ADODB.Recordset
Dim i As Integer
Dim j As Integer
'选中MSHFlexGrid1的行,并对其进行修改
txtsql = "select * from student_info where cardID='" & Trim(MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 0)) & "'"
Set reSI = ExecuteSQL(txtsql, msgtext)
frmSinf.Text1(0) = reSI.Fields(1)
frmSinf.Text1(2) = reSI.Fields(6)
frmSinf.Text1(1) = reSI.Fields(2)
frmSinf.Text1(6) = reSI.Fields(0)
frmSinf.Combo1 = reSI.Fields(3)
frmSinf.Text1(7) = reSI.Fields(7)
frmSinf.Text1(3) = reSI.Fields(4)
frmSinf.Text1(8) = reSI.Fields(8)
frmSinf.Text1(4) = reSI.Fields(5)
frmSinf.Text1(7) = reSI.Fields(7)
frmSinf.Text1(9) = reSI.Fields(11)
frmSinf.Show
SetParent frmSinf.hWnd, frmMain.hWnd
End Sub
同时对对MSHFlexGrid选中行进行删除也是这个道理~