1

試圖隱藏DataGridView的44列在Windows 7機器上需要44秒。我如何加快速度?我用下面的代碼:vb.net隱藏DataGridView中的列非常慢

'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

有沒有其他的事情與你沒有展示的gridview相關。例如,你是否需要重新查詢數據源?這可能會減慢你的迴應,但只是隱藏列不應該。 – jason 2013-03-04 19:00:37

+0

你爲什麼隱藏所有的列?你不能隱藏網格或解除綁定數據源嗎? – Jaxedin 2013-03-05 01:38:06

回答

3

你的循環改成這樣,因爲這將通過列循環,使他們不可見......對於我的測試,以確保公正,我加了250列,把它們藏在所有有關與此環的第二...

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() 

至於你double緩衝你的datagridview,雙緩衝窗體,因爲它會減少發生在該窗體上的任何閃爍。 這裏有兩個選擇:1 - 在屬性窗口中爲你的窗體設置雙緩衝區或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 

你可以,如果你選擇這樣做留下上面的代碼,這將有助於整體的形式和坐在其上的部件。這是我最喜歡的,雖然對於一個DataGridView,以避免任何閃爍什麼那麼包括滾動條...

  • 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

0

一列,當設置爲根據內容(如displayedcells)自動配置的autosizemode屬性可以減慢整個網格。它似乎重新繪製「內部」。我通過僅在小網格上使用這些類型並非常謹慎地爲其他人解決了我的網格問題。花了我一段時間來認爲這是問題,因爲沒有外部繪製/事件發生它只是顯得非常緩慢。