I am using windows forms C#.
As shown in the screen shot, I have a Form which has a user control, a tab control and a DataGridView (30 rows and 17 columns). I read data from SQL Server to fill the DataGrdiView.
The issue:
When I scroll horizontally the DataGridView
flickers a lot. However scrolling vertically works perfect with no flickering.
I had a look here, here, here and here but none of them related to my issue.
Anyone knows any solution to prevent DataGridView
from flickering when scrolling horizontally.
use this class
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);
}
}
and enter this code.
this.dataGridView1.DoubleBuffered(true);
enjoy.
All you need is to use a DoubleBuffered
DataGridview
subclass:
class DBDataGridView : DataGridView
{
public DBDataGridView() { DoubleBuffered = true; }
}
It is also possible to inject double-buffering into a normal out-of-the-box control, but I prefer to have a class of my own as this is extensible in other ways as well..
I have expanded the class by a public property to allow turning DoubleBuffering
on and off..:
public class DBDataGridView : DataGridView
{
public new bool DoubleBuffered
{
get { return base.DoubleBuffered; }
set { base.DoubleBuffered = value; }
}
public DBDataGridView()
{
DoubleBuffered = true;
}
}
..and tested it with a load of 200 columns and 2000 rows. The difference is obvious; while vertical scrolling did work without horizontal scrolling needs DoubleBuffering
..
Note that the Form also has a DoubleBuffering
property, but that will not propagate to any embedded controls!
Or you can use a function like this
In your 'FormLoad' function just enter this line of code.
yourDataGridView.GetType().GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(yourDataGridView, true, null);
and import BindingFlags by writing below line on top.
using System.Reflection;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With