您的位置:首页 > 数据库

msFlexGrid 实现 直接修改单元格内容

2009-08-06 12:10 316 查看
今天在做维护学生基本信息模块时,我想直接在msflexGrid控件中显示,并修改想改变的基本信息。msflexGrid控件不能直接编辑,所以我们首先要实现能在msflexGrid控件中直接编辑的功能。实现此功能,我使用text控件来辅助我完成。
首先当msflexGrid控件发生keypress事件时,我得使text处于显示编辑状态,并能将此控件覆盖在选中的单元格上(所以,在这里我们还要设置一下text的位置及大小,涉及到msflexGrid控件的CellWidth,RowHeight,left,top,CellLeft,CellTop等属性)。
然后,当msflexGrid控件发生leaveCell事件时,我们就要将所输入的内容付给要修改的单元格了。
最后我们将所修改的内容写入数据库就好了。
但我们在操作时,会发现我们点击一个单元格而不去更改,就去选取其他单元格时,会出现刚才的单元格内容为空,或发生其他改变(根据代码不同显示结果不同,我做时由于发生leaveCell事件时,会将刚才的单元格内容等于text的值,所以出现内容为空)。并且,我们的第一行应该是字段名字而不是字段值,所以应该将第一行固定才好。
想解决这些问题就要弄懂msflexGrid控件的一下属性或方法,而且要将他们联系起来思考。
1、      msflexGrid.text指的是当前单元格内容
2、      发生msflexgrid_leaveCell事件,即我们有去点击其他事件的转变过程中时,它的Row和Col指的是刚才处于要修改的单元格
3、      而click事件则是现在选中的单元格的Row和Col
在了解这些属性和调试不和情理的地方时我们可以使用msgbox来协助,最重要的是在了解了这些属性后,要能够分析出他们同我们要解决的问题之间的关系。把关系整明白,才有可能在这些属性方法的基础上解决好问题。
一下是部分代码,有兴趣可以看看
通用
Option Explicit
Dim strCellValue As String
Dim booChange As Boolean
——————————————
 
Private Sub MSFlexGrid1_Click()
    Dim intRow As Integer
    Dim intCol As Integer
    intRow = MSFlexGrid1.Row
    intCol = MSFlexGrid1.Col
   
    strCellValue = MSFlexGrid1.TextMatrix(intRow, intCol)
   
End Sub
 
'使text2得到msflexgri控件里的内容
Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)
  
    If KeyAscii = 13 Then
        Text2.Text = Trim(MSFlexGrid1.Text) + Text2.Text
        Text2.SelStart = Len(Text2.Text)
        booChange = True
    Else
        Text2.Text = Chr(KeyAscii) + Text2.Text
        Text2.SelStart = 1
        booChange = True
       
    End If
    Call ShowText
    KeyAscii = 0
   
End Sub
 
'定位text2 的位置,与选中的单元格位置大小重合
Private Sub ShowText()
    Text2.Visible = False
    Text2.Width = MSFlexGrid1.ColWidth(MSFlexGrid1.Col)
    Text2.Height = MSFlexGrid1.RowHeight(MSFlexGrid1.Row)
    Text2.Left = MSFlexGrid1.CellLeft + MSFlexGrid1.Left
    Text2.Top = MSFlexGrid1.CellTop + MSFlexGrid1.Top
    Text2.Visible = True
    Text2.SetFocus
End Sub
 
'修改了内容才改变单元格内容,没有进行修改,则依旧赋值原先的值
Private Sub MSFlexGrid1_LeaveCell()
    If booChange = True Then
        MSFlexGrid1.Text = Text2.Text
        Text2.Visible = False
        Text2.Text = ""
    Else
        MSFlexGrid1.Text = strCellValue
    End If
End Sub
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  integer 数据库