Vb6 更快地填充两个SGRID

Vb6 更快地填充两个SGRID,vb6,grid,vbaccelerator,Vb6,Grid,Vbaccelerator,我有大约10K条记录,每个记录都必须填充在两个vbaccelerators SGRID中,我目前使用以下代码 With grdList .Clear If colTasks Is Nothing Then Exit Sub .ReDraw = False For i = 1 To colTasks.Count AddItem colTasks(i) Next .ReDraw = True End With additem子例程对于

我有大约10K条记录,每个记录都必须填充在两个vbaccelerators SGRID中,我目前使用以下代码

With grdList
     .Clear
     If colTasks Is Nothing Then Exit Sub
     .ReDraw = False
     For i = 1 To colTasks.Count
      AddItem colTasks(i)
    Next
  .ReDraw = True
End With
additem子例程对于两个网格是不同的,特定于正在处理的数据。看起来像这样

    Dim lCol   As Long
    Dim bIsDue As Boolean
    Dim sCat   As String
   sCat = cboCat.Text
   With grdList
       If IsEqual(sCat, oItem.Category) Or IsEqual(sCat, "all") Then
            ' Show/Remove Completed
           If Not IsNullOrEmpty(oItem.DueDate) Then
               sCat = DateDiff("d", oItem.DueDate, DateValue(Now))
               bIsDue = (CLng(sCat) > 0)
               If ShowDueOnly And Not bIsDue Then Exit Function
            End If
        Else
            Exit Function
        End If
      If lRow > .Rows Or lRow = 0 Then
          grdList.AddRow
          lRow = .Rows
        End If
        If Not IsNullOrEmpty(oItem.DueDate) Then
            lCol = .ColumnIndex("DueDate")
          lColor = IIf(bIsDue, vbRed, vbBlack)
          sCat = Format$(oItem.DueDate, "MM/dd/yyyy")
          .CellDetails lRow, lCol, CDate(sCat), DT_LEFT, IconIndex("ARROW"), , lColor
        End If
      lCol = .ColumnIndex("Privacy")
      .CellIcon(lRow, lCol) = IIf(oItem.IsPrivate, IconIndex("LOCK"), -1)
      'completed
      lCol = .ColumnIndex("Complete")
     .CellIcon(lRow, lCol) = IIf(oItem.Completed, IconIndex("CHECK"), -1)         
    End With

填充网格大约需要20秒,是否有其他方法可以加快速度

如果可以按顺序添加行,则可以选择让SGrid为您预先分配多行,而不是单独添加每一行,这样可以提高性能。为此,请将Rows属性设置为所需的行数。

说明如果可以按顺序添加行,则可以选择让SGrid为您预先分配多行,而不是单独添加每行,这样可以提高性能。为此,请将Rows属性设置为所需的行数。

通常,在UI代码中,每次更改后刷新/重新绘制控件最慢。确定这是否是问题所在的一种简单方法是,在开始修改控件内容之前隐藏控件集的Visible属性,然后在修改后使其再次可见。是的,我这样做了。您还可以看到,我甚至设置了.ReDraw=False,以加快速度。但是我仍然认为20sec太长了,不需要每次添加一行,而是一次从一开始就创建足够的行,然后用data@Hrqls谢谢你的提示,但我必须有条件地添加行,并不是所有数据都将添加到行中。首先使用所需的条件在字符串数组中构建数据。完成后,确保网格一次有足够的行,并用字符串数组中的数据填充网格通常,在UI代码中,最慢的是每次更改后刷新/重新绘制控件。确定这是否是问题所在的一种简单方法是,在开始修改控件内容之前隐藏控件集的Visible属性,然后在修改后使其再次可见。是的,我这样做了。您还可以看到,我甚至设置了.ReDraw=False,以加快速度。但是我仍然认为20sec太长了,不需要每次添加一行,而是一次从一开始就创建足够的行,然后用data@Hrqls谢谢你的提示,但我必须有条件地添加行,并不是所有数据都将添加到行中。首先使用所需的条件在字符串数组中构建数据。完成后,请确保网格一次有足够的行,并使用字符串ArrayTanks中的数据填充网格以供提示,但我必须有条件地添加行,并不是所有数据都将添加到行中。我怀疑您会发现在循环中迭代一次更快,只需计算行而不做任何操作,然后创建那么多行,然后运行循环填充这些行。这是值得尝试的!我确实先创建了所有的行,然后在填充之后删除这些行。谢谢你的提示,但是我必须有条件地添加行,并不是所有的数据都会添加到行中。我想你会发现在循环中迭代一次会更快,只需计算行而不做任何事情,然后创建那么多行,然后通过循环填充行。这是值得尝试的!我确实先创建了所有的行,然后在填充之后删除这些行。谢谢