Public Sub DisplayRecord() On Error GoTo DisplayError
Dim i, Gridrow As Integer ClearDisplay MSFlexGrid1.Clear Setgrid_Head Gridrow = 0 Do Until rs1.EOF Gridrow = Gridrow + 1 MSFlexGrid1.Row = Gridrow For i = 0 To Col_Num - 1 MSFlexGrid1.Col = i If Not IsNull(rs1.Fields(i)) Then MSFlexGrid1.Text = rs1.Fields(i) Else MSFlexGrid1.Text = "" grid(Gridrow, i) = rs1.Fields(i) Next rs1.MoveNext Loop Exit SubDisplayError: MsgBox Err.Description
End Sub 具体的rs1中的值,就用文本框赋值就可以 了
'=================================== '使用MSFlexGrid + TextBox 实现对表格数据的操作 '=================================== Public fRow, fCol As Long Private Sub Form_Load()Text1.BorderStyle = 0 MSFlexGrid1.Rows = 20 MSFlexGrid1.Cols = 4For i = 0 To 19 For j = 0 To 3 MSFlexGrid1.TextMatrix(i, j) = "Grid(" & i & "," & j & ")" Next NextfRow = 0: fCol = 0 Text1.Text = MSFlexGrid1.TextMatrix(0, 0)End Sub Private Sub MSFlexGrid1_LeaveCell() MSFlexGrid1.TextMatrix(fRow, fCol) = Text1.Text Text1.Text = "" End SubPrivate Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If Button = 1 Then
ElseIf Button = 2 Then Text1.Visible = False Text1.Text = "" End If End Sub
保存到数据库的代码要另写。象可以从数据库读出数据到mshflexgrid一样,当然应该可以写回去。
Option Explicitconst gsConnectStr = "DRIVER={SQL Server}" & ";Server=" & GetSetting(APP_CATEGORY, APPNAME, "SqlServerName", "") & _ ";DATABASE=db119;UID=" & GetSetting(APP_CATEGORY, APPNAME, "SqlUserName", "") & _ ";PWD=" & GetSetting(APP_CATEGORY, APPNAME, "SqlUserPassword", "")Dim curRow As Integer, curCol As IntegerPrivate Sub cmdInsert_Click() With MSHFlexGrid1 .Rows = .Rows + 1 curRow = .Rows - 1 .Row = .Rows - 1 .TextMatrix(.Row, 0) = .Row curCol = 2 .Col = 1 Call MSHFlexGrid1_DblClick curCol = 1 End With End SubPrivate Sub Form_Load() txtEdit.Visible = False End SubPrivate Sub RefreshList() Dim adoCn As New ADODB.Connection, adoRst As New ADODB.Recordset adoCn.Open gsConnectStr With MSHFlexGrid1 .Redraw = False .Rows = 1 adoRst.Open "Select * From UserLog Order By UserID", adoCn, adOpenStatic, adLockReadOnly Do While Not adoRst.EOF .Rows = .Rows + 1 .TextMatrix(.Rows - 1, 0) = .Rows - 1 ........... .TextMatrix(.Rows - 1, 4) = adoRst!UserName & "" adoRst.MoveNext Loop adoRst.Close If .Rows = 1 Then .Rows = 2 .FixedRows = 1 .Redraw = True End With adoCn.Close End Sub Private Sub MSHFlexGrid1_Click() If curRow = MSHFlexGrid1.Row And curCol = MSHFlexGrid1.Col Then Call MSHFlexGrid1_DblClick Else curRow = MSHFlexGrid1.Row curCol = MSHFlexGrid1.Col txtEdit.Visible = False End If End SubPrivate Sub MSHFlexGrid1_DblClick() With txtEdit .Visible = True .Height = MSHFlexGrid1.CellHeight .Width = MSHFlexGrid1.ColWidth(MSHFlexGrid1.Col) .Top = MSHFlexGrid1.CellTop + MSHFlexGrid1.Top - 2 * Screen.TwipsPerPixelY .Left = MSHFlexGrid1.CellLeft - 2 * Screen.TwipsPerPixelX If curCol = 4 Then .MaxLength = 5 Else .MaxLength = 15 End If .Text = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, MSHFlexGrid1.Col) .SelStart = 0 .SelLength = Len(.Text) .SetFocus End With End If End SubPrivate Sub txtEdit_LostFocus() Dim adoCn As New ADODB.Connection, adoRst As New ADODB.Recordset Dim IsExist As Boolean If curCol = 1 And MSHFlexGrid1.TextMatrix(curRow, 1) = "" Then If Trim(txtEdit.Text) <> "" Then adoCn.Open gsConnectStr adoRst.Open "select UserID from UserLog where UserID = '" & Trim(txtEdit.Text) & "'", adoCn, adOpenStatic, adLockReadOnly If adoRst.EOF Then adoCn.Execute "insert into UserLog(UserID,Authority) Values('" & Trim(txtEdit.Text) & "',2)" Else IsExist = True End If adoRst.Close adoCn.Close MSHFlexGrid1.TextMatrix(curRow, 3) = cmbEdit.List(2) Else Call RefreshList Exit Sub End If End If If IsExist Then Call RefreshList Exit Sub End If If Trim(txtEdit.Text) <> "" And MSHFlexGrid1.TextMatrix(curRow, curCol) <> Trim(txtEdit.Text) Then MSHFlexGrid1.TextMatrix(curRow, curCol) = Trim(txtEdit.Text) adoCn.Open gsConnectStr frmFireServer.anoPassword1.PasswordValue = MSHFlexGrid1.TextMatrix(curRow, 2) ' adoCn.Execute "update UserLog set Password='" & frmFireServer.anoPassword1.PasswordData & _ "',UserName='" & MSHFlexGrid1.TextMatrix(curRow, 4) & "' Where UserID='" & Trim(MSHFlexGrid1.TextMatrix(curRow, 1)) & "'" adoRst.Open "select * from UserLog where UserID='" & MSHFlexGrid1.TextMatrix(curRow, 1) & "'", adoCn, adOpenStatic, adLockOptimistic If Not adoRst.EOF Then adoRst!Password = frmFireServer.anoPassword1.PasswordData adoRst!UserName = MSHFlexGrid1.TextMatrix(curRow, 4) adoRst.Update End If adoRst.Close adoCn.Close End If End Sub
'在窗体上放一文本框text1,和一MSHFLEXGRID控件 Dim adoCnn As New ADODB.Connection Dim adoCmm As New ADODB.Command Dim Rs As New ADODB.Recordset Private Sub Form_Load() Text1.Move -10000, -10000, 1, 1 adoCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Program Files\Microsoft Visual Studio\VB98\NWIND.MDB;Persist Security Info=False" Rs.CursorLocation = adUseClient Rs.Open "select * from employees", adoCnn, adOpenDynamic, adLockBatchOptimistic Set MSHFlexGrid1.DataSource = Rs End SubPrivate Sub MSHFlexGrid1_EnterCell() MSHFlexGrid1.CellBackColor = vbBlue MSHFlexGrid1.CellForeColor = vbWhite Text1.Text = MSHFlexGrid1.Text Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End SubPrivate Sub MSHFlexGrid1_LeaveCell() MSHFlexGrid1.CellBackColor = vbWhite MSHFlexGrid1.CellForeColor = vbBlue End SubPrivate Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Text1.SetFocus End SubPrivate Sub Text1_Change() MSHFlexGrid1.Text = Text1.Text End SubPrivate Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyLeft, vbKeyRight, vbKeyUp, vbKeyDown KeyCode = 0 End Select End Sub
On Error GoTo DisplayError
Dim i, Gridrow As Integer
ClearDisplay
MSFlexGrid1.Clear
Setgrid_Head
Gridrow = 0
Do Until rs1.EOF
Gridrow = Gridrow + 1
MSFlexGrid1.Row = Gridrow
For i = 0 To Col_Num - 1
MSFlexGrid1.Col = i
If Not IsNull(rs1.Fields(i)) Then MSFlexGrid1.Text = rs1.Fields(i) Else MSFlexGrid1.Text = ""
grid(Gridrow, i) = rs1.Fields(i)
Next
rs1.MoveNext
Loop
Exit SubDisplayError:
MsgBox Err.Description
End Sub
具体的rs1中的值,就用文本框赋值就可以 了
'===================================
'使用MSFlexGrid + TextBox 实现对表格数据的操作
'===================================
Public fRow, fCol As Long
Private Sub Form_Load()Text1.BorderStyle = 0
MSFlexGrid1.Rows = 20
MSFlexGrid1.Cols = 4For i = 0 To 19
For j = 0 To 3
MSFlexGrid1.TextMatrix(i, j) = "Grid(" & i & "," & j & ")"
Next
NextfRow = 0: fCol = 0
Text1.Text = MSFlexGrid1.TextMatrix(0, 0)End Sub
Private Sub MSFlexGrid1_LeaveCell()
MSFlexGrid1.TextMatrix(fRow, fCol) = Text1.Text
Text1.Text = ""
End SubPrivate Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = 1 Then
fRow = MSFlexGrid1.MouseRow
fCol = MSFlexGrid1.MouseCol
Text1.Left = MSFlexGrid1.ColPos(MSFlexGrid1.MouseCol) + MSFlexGrid1.Left
Text1.Top = MSFlexGrid1.RowPos(MSFlexGrid1.MouseRow) + MSFlexGrid1.Top
Text1.Height = MSFlexGrid1.CellHeight
Text1.Width = MSFlexGrid1.CellWidth
Text1.Text = MSFlexGrid1.TextMatrix(fRow, fCol)
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
Text1.Visible = True
Text1.SetFocus
ElseIf Button = 2 Then
Text1.Visible = False
Text1.Text = ""
End If
End Sub
";DATABASE=db119;UID=" & GetSetting(APP_CATEGORY, APPNAME, "SqlUserName", "") & _
";PWD=" & GetSetting(APP_CATEGORY, APPNAME, "SqlUserPassword", "")Dim curRow As Integer, curCol As IntegerPrivate Sub cmdInsert_Click()
With MSHFlexGrid1
.Rows = .Rows + 1
curRow = .Rows - 1
.Row = .Rows - 1
.TextMatrix(.Row, 0) = .Row
curCol = 2
.Col = 1
Call MSHFlexGrid1_DblClick
curCol = 1
End With
End SubPrivate Sub Form_Load()
txtEdit.Visible = False
End SubPrivate Sub RefreshList()
Dim adoCn As New ADODB.Connection, adoRst As New ADODB.Recordset
adoCn.Open gsConnectStr
With MSHFlexGrid1
.Redraw = False
.Rows = 1
adoRst.Open "Select * From UserLog Order By UserID", adoCn, adOpenStatic, adLockReadOnly
Do While Not adoRst.EOF
.Rows = .Rows + 1
.TextMatrix(.Rows - 1, 0) = .Rows - 1
...........
.TextMatrix(.Rows - 1, 4) = adoRst!UserName & ""
adoRst.MoveNext
Loop
adoRst.Close
If .Rows = 1 Then .Rows = 2
.FixedRows = 1
.Redraw = True
End With
adoCn.Close
End Sub
Private Sub MSHFlexGrid1_Click()
If curRow = MSHFlexGrid1.Row And curCol = MSHFlexGrid1.Col Then
Call MSHFlexGrid1_DblClick
Else
curRow = MSHFlexGrid1.Row
curCol = MSHFlexGrid1.Col
txtEdit.Visible = False
End If
End SubPrivate Sub MSHFlexGrid1_DblClick()
With txtEdit
.Visible = True
.Height = MSHFlexGrid1.CellHeight
.Width = MSHFlexGrid1.ColWidth(MSHFlexGrid1.Col)
.Top = MSHFlexGrid1.CellTop + MSHFlexGrid1.Top - 2 * Screen.TwipsPerPixelY
.Left = MSHFlexGrid1.CellLeft - 2 * Screen.TwipsPerPixelX
If curCol = 4 Then
.MaxLength = 5
Else
.MaxLength = 15
End If
.Text = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, MSHFlexGrid1.Col)
.SelStart = 0
.SelLength = Len(.Text)
.SetFocus
End With
End If
End SubPrivate Sub txtEdit_LostFocus()
Dim adoCn As New ADODB.Connection, adoRst As New ADODB.Recordset
Dim IsExist As Boolean
If curCol = 1 And MSHFlexGrid1.TextMatrix(curRow, 1) = "" Then
If Trim(txtEdit.Text) <> "" Then
adoCn.Open gsConnectStr
adoRst.Open "select UserID from UserLog where UserID = '" & Trim(txtEdit.Text) & "'", adoCn, adOpenStatic, adLockReadOnly
If adoRst.EOF Then
adoCn.Execute "insert into UserLog(UserID,Authority) Values('" & Trim(txtEdit.Text) & "',2)"
Else
IsExist = True
End If
adoRst.Close
adoCn.Close
MSHFlexGrid1.TextMatrix(curRow, 3) = cmbEdit.List(2)
Else
Call RefreshList
Exit Sub
End If
End If
If IsExist Then
Call RefreshList
Exit Sub
End If
If Trim(txtEdit.Text) <> "" And MSHFlexGrid1.TextMatrix(curRow, curCol) <> Trim(txtEdit.Text) Then
MSHFlexGrid1.TextMatrix(curRow, curCol) = Trim(txtEdit.Text)
adoCn.Open gsConnectStr
frmFireServer.anoPassword1.PasswordValue = MSHFlexGrid1.TextMatrix(curRow, 2)
' adoCn.Execute "update UserLog set Password='" & frmFireServer.anoPassword1.PasswordData & _
"',UserName='" & MSHFlexGrid1.TextMatrix(curRow, 4) & "' Where UserID='" & Trim(MSHFlexGrid1.TextMatrix(curRow, 1)) & "'"
adoRst.Open "select * from UserLog where UserID='" & MSHFlexGrid1.TextMatrix(curRow, 1) & "'", adoCn, adOpenStatic, adLockOptimistic
If Not adoRst.EOF Then
adoRst!Password = frmFireServer.anoPassword1.PasswordData
adoRst!UserName = MSHFlexGrid1.TextMatrix(curRow, 4)
adoRst.Update
End If
adoRst.Close
adoCn.Close
End If
End Sub
Dim adoCnn As New ADODB.Connection
Dim adoCmm As New ADODB.Command
Dim Rs As New ADODB.Recordset
Private Sub Form_Load() Text1.Move -10000, -10000, 1, 1
adoCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Program Files\Microsoft Visual Studio\VB98\NWIND.MDB;Persist Security Info=False"
Rs.CursorLocation = adUseClient
Rs.Open "select * from employees", adoCnn, adOpenDynamic, adLockBatchOptimistic
Set MSHFlexGrid1.DataSource = Rs
End SubPrivate Sub MSHFlexGrid1_EnterCell()
MSHFlexGrid1.CellBackColor = vbBlue
MSHFlexGrid1.CellForeColor = vbWhite
Text1.Text = MSHFlexGrid1.Text
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End SubPrivate Sub MSHFlexGrid1_LeaveCell()
MSHFlexGrid1.CellBackColor = vbWhite
MSHFlexGrid1.CellForeColor = vbBlue
End SubPrivate Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Text1.SetFocus
End SubPrivate Sub Text1_Change()
MSHFlexGrid1.Text = Text1.Text
End SubPrivate Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyLeft, vbKeyRight, vbKeyUp, vbKeyDown
KeyCode = 0
End Select
End Sub