vb.net隐藏DataGridView中的列非常慢

时间:2013-03-04 16:13:04

标签: vb.net visual-studio-2010 .net-4.0 datagridview doublebuffered

在Windows 7计算机上尝试隐藏44列DataGridView需要44秒。我怎样才能加快速度呢?我使用了以下代码:

 'Turn on DataGridView.DoubleBuffered
 Dim myType As Type = GetType(DataGridView)
 myType.InvokeMember( _
   "DoubleBuffered", _
    BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, _
    Nothing, DataGridView1, New Object() {True})

 'hide the following columns
 Me.SuspendLayout()
 For Each col As DataGridViewColumn In DataGridView1.Columns
    col.Visible = False
 Next
 Me.ResumeLayout()

2 个答案:

答案 0 :(得分:4)

将循环更改为此,因为这将遍历列并使它们不可见...为了我的测试只是为了确保,我添加了250列,并在这个循环中大约一秒钟隐藏它们...... / p>

 For i As Integer = 0 To DataGridView1.ColumnCount - 1
   DataGridView1.Columns(i).Visible = False
 End Sub

如果您选择这样做,这将删除所有列...

  For i As Integer = 0 To DataGridView1.ColumnCount - 1
   DataGridView1.Columns.Remove(DataGridView1.Columns(0).Name)
  Next

这是另一种方式......

  DataGridView1.Columns.Clear()

至于你对datagridview进行双缓冲,双重缓冲表单,因为它会减少在该表单上发生的任何闪烁。 这里有两个选项:1 - 在表单的属性窗口中设置双缓冲区OR 2 - 初始化另一个子到双缓冲它...

以下是表单的双缓冲代码...将它直接放在您的班级名称下......

 Public Sub New()
    MyBase.New()

    MyBase.DoubleBuffered = True
    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
 End Sub

如果您选择这样做,您可以保留上述代码,这将有助于整体表单及其所在的组件。这是我最喜欢的一个数据网格视图,以避免任何闪烁,包括滚动条......

  • 1把它放在表格的最顶层......

    Imports System.Reflection
    
  • 2将此添加到表单加载...

    BufferMethod.DoubleBuffered(DataGridView1, True)
    
  • 3将这个新课程放在另一课程的最末端(在课程类别下)

    Public NotInheritable Class BufferMethod
      Public Shared Sub DoubleBuffered(dgView As DataGridView, Setting As Boolean)
          Dim dgvType As Type = dgView.[GetType]()
          Dim propInfo As PropertyInfo = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance Or BindingFlags.NonPublic)
          propInfo.SetValue(dgView, Setting, Nothing)
      End Sub
    End Class
    

希望你喜欢!

此致

MrCodexer

答案 1 :(得分:1)

列的autosizemode属性,当设置为根据内容自动配置(如showncells)时,可以减慢整个网格的速度。它似乎在重写“内部”。我通过在小网格上使用这些类型来解决我的网格问题,而对其他网格则非常谨慎。我花了一段时间才发现这是问题所在,因为没有外部抽奖/事件发生它只是看起来很慢。