在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()
答案 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)时,可以减慢整个网格的速度。它似乎在重写“内部”。我通过在小网格上使用这些类型来解决我的网格问题,而对其他网格则非常谨慎。我花了一段时间才发现这是问题所在,因为没有外部抽奖/事件发生它只是看起来很慢。