TextBox + MsHFlexGrid录入数据退出时无法检测新增尚未保存数据。
代码如下:应该都没问题,我退出时 检测flex1.Rows总为已保存记录数,无法获得新增行后的记录数,而我在增行事件中检测flex1.Rows总记录数的确是每增加一行flex1.Rows就加1.不知道数据传输错在哪里。请高手帮我分析下,谢谢了!
如我已存数据条目为5条。
'行增加按钮
Private Sub addline_Click()
i = 1
flex1.AddItem i
flex1.Refresh
Call SetRowColor(flex1)
flex1.Row = flex1.Row + 1
flex1.Col = 3
MsgBox "增行代码" & flex1.Rows   这里总是能正确+1
End Sub'退出时的数据检测部分。
Sub TESTDATA()
MsgBox "进入TESTDATE阶段" & flex1.Rows 这里却永远只能检测到6条数据。
For i = 1 To flex1.Rows - 1
   MsgBox i
   If flex1.TextMatrix(i, 1) = "" And flex1.TextMatrix(i, 2) = "" Then
      MsgBox "1-2都为空。" & i
      Select Case MsgBox("数据已修改,是否保存", vbQuestion + vbYesNoCancel, "提示信息")
      Case vbYes
         add_wxd.saveline = True
      Case vbNo
         Unload Me
      Case vbCancel
      End Select
   End If
Next i
End Sub'退出按钮
Private Sub cmdexit_Click()
Unload Me
Call TESTDATA  '我是调用的检测代码,应该不影响啊!
End Sub

解决方案 »

  1.   

    不劳烦大家了。小弟找到答案了。
    '退出按钮 
    Private Sub cmdexit_Click() 
    Unload Me 
    Call TESTDATA  '我是调用的检测代码,应该不影响啊! 
    End Sub
    写反了。
    应该写成。'退出按钮 
    Private Sub cmdexit_Click() 
    Call TESTDATA  '我是调用的检测代码,应该不影响啊! 
    Unload Me 
    End Sub
      

  2.   

    楼上大哥,小弟发现新问题。代码如下:请指教。
    我先通过修改进入编辑状态,之后增行,然后退出。又报错 下标越界,可这次我没有先Unload Me啊!怎么回事,我检测半天了。谢了。
    '退出时的数据检测部分。
    Sub TESTDATA()
    'MsgBox "进入TESTDATE阶段" & flex1.Rows
    For i = 1 To flex1.Rows - 1
    '   MsgBox i
       If flex1.TextMatrix(i, 1) = "" And flex1.TextMatrix(i, 2) = "" Then   下标越界
    '      MsgBox "1-2都为空。" & i
          Select Case MsgBox("数据已修改,是否保存", vbQuestion + vbYesNoCancel, "提示信息")
          Case vbYes
             add_wxd.saveline = True
          Case vbNo
             Unload Me
          Case vbCancel
             Exit Sub
          End Select
       Else
       Unload Me
       End If
    Next i
    End Sub'退出按钮
    Private Sub cmdexit_Click()If cmdSAVE.Enabled = True Then
    '   MsgBox flex1.Rows
       Call TESTDATA
    Else
       Unload Me
    End If
    End Sub'行增加按钮
    Private Sub addline_Click()
    i = 1
    flex1.AddItem i
    flex1.Refresh
    Call SetRowColor(flex1)
    flex1.Row = flex1.Row + 1
    flex1.Col = 3
    'MsgBox "增行代码" & flex1.Rows
    End Sub
      

  3.   

    改为
     Case vbNo
            Unload Me
            Exit Sub'就是增加这句
      

  4.   

    还是不成,问题还是有,我估计问题出现在这里。'退出时的数据检测部分
          Case vbCancel 
            Exit Sub

    因为 我是点击修改后,进入编辑状态了,增加了一行后(尚未保存到数据库),因此直接退出“退出时的数据检测部分”子程序判断“For i = 1 To flex1.Rows - 1” 的 flex1.Rows 应为已+1的值,可实际测试得到的却是没+1的值。
      

  5.   

    经小弟逐行检测发现是有问题。哈哈!总是自问自答!
    1、保存关闭 直接退出2、保存开启 检测有数据改动
                是 保存
                否 退出
                取消 无
    3、保存开启 检测无数据改动
                直接退出
    逻辑顺序刚错了。已经修改过来。谢了各位!  Else 
      Unload Me 
      End If 
    Next i
    End Sub应改为:
          End Select
       End If
    Next i
    'MsgBox "flex1.TextMatrix(i, 1) <> "" And flex1.TextMatrix(i, 2) <> "" "
    Unload Me
    End Sub