[C#] DataGridView DoubleBuffered

這次再度碰到DataGridView的效能問題
之前雖然實作了Virtual Mode
但是以DataTable為資料來源而實作

而我這次使用Entity Framework + DataGridViewCells
要再套回去Virtual Mode顯得有些麻煩
所以就再度尋找其他解決辦法

最後找到了設定DoubleBuffered的方法
參考資料:

  1. MSDN: Control.DoubleBuffered Property
  2. C# DataGridView DoubleBuffered Property
  3. Set DoubleBuffered Property [C#]

原理我就不贅述了
直接參考第二個網址
Form.cs 的底下加入 Static Class

using System.Reflection;

public static class ExtensionMethods
{
    public static void DoubleBuffered(this DataGridView dgv, bool setting)
    {
        Type dgvType = dgv.GetType();
        PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
        pi.SetValue(dgv, setting, null);
    }
}

然後記得執行DataGridView.DoubleBuffered(true);

搞定!
可以開始享受滾動順暢的DataGridView了。

 

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s