with form example ejemplos data c# winforms datagridview

form - fill datagridview c#



¿Cómo evitar que DataGridView parpadee cuando se desplaza horizontalmente? (2)

Todo lo que necesita es usar una subclase DoubleBuffered DataGridview :

class DBDataGridView : DataGridView { public DBDataGridView() { DoubleBuffered = true; } }

También es posible inyectar doble buffer en un control normal de fábrica, pero prefiero tener una clase propia, ya que también es extensible de otras maneras.

He expandido la clase por una propiedad pública para permitir el encendido y apagado de DoubleBuffering ..:

public class DBDataGridView : DataGridView { public new bool DoubleBuffered { get { return base.DoubleBuffered; } set { base.DoubleBuffered = value; } } public DBDataGridView() { DoubleBuffered = true; } }

... y lo probó con una carga de 200 columnas y 2000 filas . La diferencia es obvia; mientras que el desplazamiento vertical funcionó sin necesidad de desplazamiento horizontal DoubleBuffering ..

Tenga en cuenta que el Formulario también tiene una propiedad DoubleBuffering , ¡pero que no se propagará a ningún control incrustado!

Estoy usando formularios de Windows C #.

Como se muestra en la captura de pantalla, tengo un formulario que tiene un control de usuario, un control de pestañas y un DataGridView (30 filas y 17 columnas). Leo datos de SQL Server para llenar DataGrdiView.

La cuestión:

Cuando me desplazo horizontalmente, DataGridView parpadea mucho. Sin embargo, el desplazamiento vertical funciona perfecto sin parpadeos.

Eché un vistazo aquí , aquí , aquí y aquí, pero ninguno de ellos está relacionado con mi problema.

Cualquiera conoce alguna solución para evitar que DataGridView parpadee al desplazarse horizontalmente.


usa esta clase

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); } }

e ingresa este código

this.dataGridView1.DoubleBuffered(true);

disfrutar.