none
VB6.0 怎样提高MSHFlexGrid控件带区显示的读取数据速度 RRS feed

  • 问题

  • MSHFlexGrid控件:
      怎么获取MSHFlexGrid某行相对于屏幕上方的坐标位置。非 ROW

    想要实现的效果:
      想要实现(主表/从表结构)的带区显示样式。
    比如:当单击第10行的第一列时就打开与主表相关联的从表,就要实现这种功能!
      首先我的目的是想替代(主表/从表结构)的带区显示。因为如果我把MSHFlexGrid控件设置为带区显示,读取数据相当的慢!而且无法使用排序功能。这是主要原因。
      那么我就想到了使用两个MSHFlexGrid控件,一个显示主表的数据,一个显示从表的数据。默认情况下从表是隐藏的,只有当单击了主表的第“0”列时它才会执行一系列的代码,包括读取数据到从表内等等...

    请看代码:
    Private Sub MSHFlexGrid主表_Click()
        With MSHFlexGrid主表
            If .MouseCol <> 0 Then
                If MSHFlexGrid从表.Visible = True Then MSHFlexGrid从表.Visible = False
            Else
                '连接数据库,读取数据到从表内。省略部分代码...
                MSHFlexGrid从表.Visible = True
                MSHFlexGrid从表.Top = ?              '这里的坐标该怎么计算。
           End If
        End With
    End Sub

    刚开始我使用MSHFlexGrid主表的当前行数*单元格的高度。(MSHFlexGrid主表.ROW*280)'280是行高
    这样会出错,溢出。当时没考虑到!!


    不知道大家有什么好的方法与好的建议?
    或者有什么方法可以提高MSHFlexGrid控件带区显示的读取数据速度。
    首先先谢谢大家!


    时刻都在努力学习!
    2009年12月7日 8:25

答案

  • Private Sub Form_Load()
    With MSHFlexGrid主表
    .FixedCols = 0
    .FixedRows = 0
    .Rows = 11
    .Cols = 10
    For i = 0 To 10
      For j = 0 To 6
         .TextMatrix(i, j) = i * j
      Next
    Next
    End With
    End Sub
    
    Private Sub MSHFlexGrid主表_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    'If MSHFlexGrid1.MouseCol <> 0 Then Exit Sub
    Dim s As Integer
    Dim t As Integer
    s = MSHFlexGrid主表.MouseCol
    t = MSHFlexGrid主表.MouseRow
       With MSHFlexGrid主表
            If .MouseCol <> 0 Then
                If MSHFlexGrid从表.Visible = True Then MSHFlexGrid从表.Visible = False
            Else
                '连接数据库,读取数据到从表内。省略部分代码...
                ''如果没有0列的限制,可以移动到任意一单元格的相对位置
                MSHFlexGrid从表.Move MSHFlexGrid主表.Left + MSHFlexGrid主表.ColPos(s), MSHFlexGrid主表.Top + MSHFlexGrid主表.RowPos(t)
                MSHFlexGrid从表.Visible = True '数据读完后,再设为TRUE,之前可以设一个等待光标
           End If
        End With
    
    End Sub
    • 已标记为答案 张三宾 2009年12月8日 5:28
    2009年12月8日 5:14

全部回复

  • 首先要感谢大家,写的文字太多了,最后还是没能把问题描述清楚。真是浪费大家时间! 在此表示歉意!
    1.MSHFlexGrid控件带区显示样式,读取数据太慢了!要等好久才能出来。(15~30秒之间)
    2.那么使用两个MSHFlexGrid控件怎样实现与MSHFlexGrid控件带区显示样式的同样功能! 或者有更好的方案!!
    时刻都在努力学习!
    2009年12月7日 8:39
  • 一般都是用2个MSHFlexGrid分别显示主从
    http://feiyun0112.cnblogs.com/
    2009年12月8日 0:48
    版主
  • 现在主要是怎么确定从表的显示位置!
    怎样让从表始终显示在主表某个单元格的下方。
    比如我去单击了第十行,从表就显示在第十行的下方!

    时刻都在努力学习!
    2009年12月8日 1:09
  • Private Sub Form_Load()
    With MSHFlexGrid主表
    .FixedCols = 0
    .FixedRows = 0
    .Rows = 11
    .Cols = 10
    For i = 0 To 10
      For j = 0 To 6
         .TextMatrix(i, j) = i * j
      Next
    Next
    End With
    End Sub
    
    Private Sub MSHFlexGrid主表_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    'If MSHFlexGrid1.MouseCol <> 0 Then Exit Sub
    Dim s As Integer
    Dim t As Integer
    s = MSHFlexGrid主表.MouseCol
    t = MSHFlexGrid主表.MouseRow
       With MSHFlexGrid主表
            If .MouseCol <> 0 Then
                If MSHFlexGrid从表.Visible = True Then MSHFlexGrid从表.Visible = False
            Else
                '连接数据库,读取数据到从表内。省略部分代码...
                ''如果没有0列的限制,可以移动到任意一单元格的相对位置
                MSHFlexGrid从表.Move MSHFlexGrid主表.Left + MSHFlexGrid主表.ColPos(s), MSHFlexGrid主表.Top + MSHFlexGrid主表.RowPos(t)
                MSHFlexGrid从表.Visible = True '数据读完后,再设为TRUE,之前可以设一个等待光标
           End If
        End With
    
    End Sub
    • 已标记为答案 张三宾 2009年12月8日 5:28
    2009年12月8日 5:14
  • 难啃的VB 老师您好!
    真的谢谢您啊!每次您都能给我发来完整的答案!谢谢您了!
    呵呵!


    时刻都在努力学习!
    2009年12月8日 5:30
  • 不用谢啊,我来这里也是看版主们回的贴子答案,汲取精华的。
    2009年12月8日 5:32
  • 您太谦虚了,哈。
    好的,我也会好好学习的。让您见笑了!


    时刻都在努力学习!
    2009年12月8日 5:35