with manually example ejemplos data c# winforms data-binding datagridview

c# - manually - ¿Cómo puedo actualizar solo las filas visibles de DataGridView enlazado a datos?



fill datagridview c# with datatable (4)

Tengo un DataGridView vinculado a una lista de objetos personalizados creados sobre la marcha. Esta lista no es muy grande, 5000 elementos como máximo. Sin embargo, los valores de los objetos personalizados cambian cada 50 ms y la cuadrícula bloquea la aplicación al tiempo que actualiza los valores y finalmente se bloquea.

Mi pregunta es: ¿hay alguna forma de "virtualizar" el enlace de datos de DataGridView para que solo se actualicen las filas que se ven realmente en la pantalla?

EDITAR: descubrí por qué mi DataGridView era tan lento y no tenía nada que ver con el enlace de datos. Entonces esta pregunta ya no es relevante. Como nota al margen, creo que DataGridView ya actualiza solo las filas visibles cuando ocurre un evento ListChanged .


¿Qué es lo que te impide simplemente extraer el subconjunto de elementos visible en lugar de los 5000 completos?




Pasé bastante tiempo buscando este tema y esta pregunta siguió apareciendo, así que voy a vincular aquí la respuesta que resolvió mi problema: https://.com/a/9348149/674884

Tengo un DataGridView vinculado a un BindingSource que también está vinculado por ComboBoxes y TextBoxes utilizados para editar los datos. Cada evento Leave en los editores tuvo un gran retraso, que fue causado por DataGridView al rediseñar todas sus filas cuando se actualizaron los datos. Esto sucedió incluso cuando se usa VirtualMode.

El problema fue causado por la configuración de autocalibración AllCells de las columnas DataGridView. Cada vez que cambiaba un valor, DataGridView revisaba todas las filas para encontrar la cadena más larga para autosizing de la columna. Después de deshabilitar el autosizing, me di cuenta de que incluso el DataGridView de datos solo dibuja las filas visibles, por lo que no es necesario usar el VirtualMode.