技能考试的恶心问题,非要用不可编辑数据的mshflexgrid控件来输入数据。
好像要和文本框相结合。
    具体的不清楚。

解决方案 »

  1.   

    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中的值,就用文本框赋值就可以 了
      

  2.   


    '===================================
    '使用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
      

  3.   

    保存到数据库的代码要另写。象可以从数据库读出数据到mshflexgrid一样,当然应该可以写回去。
      

  4.   

    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
      

  5.   

    '在窗体上放一文本框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
      

  6.   

    俄和你一样,8过我已经搞出来了。现在再搞skin和report