I am using windows forms C#.

As shown in the screen shot, I have a Form which has a use
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