Modo virtual del control DataGridView de formularios Windows Forms

Con el modo virtual, puede gestionar la interacción entre el control DataGridView y una caché de datos personalizada. Para implementar el modo virtual, establezca la propiedad VirtualMode a true y controle uno o más de los eventos descritos en este tema. Lo normal es que controle al menos el evento CellValueNeeded, que permite al control buscar valores en la caché de datos.

Modo enlazado y modo virtual

El modo virtual solo es necesario cuando necesita complementar o reemplazar el modo enlazado. En el modo enlazado, establece la propiedad DataSource y el control carga automáticamente los datos del origen especificado y envía los cambios del usuario. Puede controlar cuáles de las columnas enlazadas se muestran y el propio origen de datos normalmente controla las operaciones como la ordenación.

Complementar el modo enlazado

Puede complementar el modo enlazado mostrando columnas sin enlazar junto con las columnas enlazadas. Esto a veces se denomina "modo mixto" y es útil para mostrar elementos como valores calculados o controles de interfaz de usuario (UI).

Dado que las columnas sin enlazar están fuera del origen de datos, las operaciones de ordenación del origen de datos las omiten. Por lo tanto, al habilitar la ordenación en modo mixto, debe administrar los datos sin enlazar en una caché local e implementar el modo virtual para permitir que el control DataGridView interactúe con él.

Para obtener más información sobre el uso del modo virtual para mantener los valores en columnas sin enlazar, vea los ejemplos de los temas de referencia de propiedades DataGridViewCheckBoxColumn.ThreeState y clases System.Windows.Forms.DataGridViewComboBoxColumn.

Reemplazar el modo enlazado

Si el modo enlazado no satisface sus necesidades de rendimiento, puede administrar todos los datos de una caché personalizada a través de controladores de eventos en modo virtual. Por ejemplo, puede usar el modo virtual para implementar un mecanismo de carga de datos Just-In-Time que recupere solo tantos datos de una base de datos en red como sea necesario para un rendimiento óptimo. Este escenario es especialmente útil cuando se trabaja con grandes cantidades de datos a través de una conexión de red lenta o con máquinas cliente que tienen una cantidad limitada de RAM o espacio de almacenamiento.

Para obtener más información sobre el uso del modo virtual en un escenario Just-In-Time, vea Implementar el modo virtual mediante la carga de datos Just-In-Time en el control DataGridView de formularios Windows Forms.

Eventos del modo virtual

Si los datos son de solo lectura, el evento CellValueNeeded puede ser el único que necesite controlar. Los eventos de modo virtual adicionales permiten habilitar funcionalidades específicas, como ediciones de usuario, adición y eliminación de filas, y transacciones de nivel de fila.

Algunos eventos estándar DataGridView (como los eventos que se producen cuando los usuarios agregan o eliminan filas, o cuando los valores de celda se editan, analizan, validan o dan formato) también son útiles en modo virtual. También puede controlar eventos que le permiten mantener valores que normalmente no se almacenan en un origen de datos enlazado, como texto de información sobre herramientas de celda, texto de error de celda y fila, datos de menú contextual de celda y fila, y datos de alto de fila.

Para obtener más información sobre cómo implementar el modo virtual para administrar datos de lectura y escritura con un ámbito de confirmación de nivel de fila, vea Tutorial: Implementar el modo virtual en el control DataGridView de formularios Windows Forms.

Para obtener un ejemplo que implementa el modo virtual con un ámbito de confirmación de nivel de celda, consulte el tema de referencia de la propiedad VirtualMode.

Los siguientes eventos solo se producen cuando la propiedad VirtualMode está establecida en true.

Evento Descripción
CellValueNeeded Usado por el control para recuperar un valor de celda de la memoria caché de datos para su visualización. Este evento solo se produce para las celdas de columnas sin enlazar.
CellValuePushed Usado por el control para confirmar la entrada del usuario para una celda en la memoria caché de datos. Este evento solo se produce para las celdas de columnas sin enlazar.

Llame al método UpdateCellValue al cambiar un valor almacenado en caché fuera de un controlador de eventos CellValuePushed para asegurarse de que el valor actual se muestra en el control y para aplicar los modos de ajuste de tamaño automáticos actualmente en vigor.
NewRowNeeded Usado por el control para indicar la necesidad de una nueva fila en la caché de datos.
RowDirtyStateNeeded Usado por el control para determinar si una fila tiene cambios perdientes de confirmación.
CancelRowEdit Usado por el control para indicar que una fila debe revertir a sus valores almacenados en caché.

Los siguientes eventos son útiles en el modo virtual, pero pueden utilizarse independientemente de la configuración de la propiedad VirtualMode.

Eventos Descripción
UserDeletingRow

UserDeletedRow

RowsRemoved

RowsAdded
Usado por el control para indicar cuándo se eliminan o agregan filas, lo que le permite actualizar la caché de datos en consecuencia.
CellFormatting

CellParsing

CellValidating

CellValidated

RowValidating

RowValidated
Usado por el control para dar formato a los valores de celda para mostrar y analizar y validar la entrada del usuario.
CellToolTipTextNeeded Usado por el control para recuperar el texto de la información sobre herramientas de la celda cuando la propiedad DataSource está establecida o la propiedad VirtualMode es true.

Las informaciones sobre herramientas de las celdas solo se muestran cuando el valor de la propiedad ShowCellToolTips es true.
CellErrorTextNeeded

RowErrorTextNeeded
Usado por el control para recuperar el texto de error de la celda o fila cuando la propiedad DataSource está establecida o la propiedad VirtualMode es true.

Llame al método UpdateCellErrorText o al método UpdateRowErrorText cuando cambie el texto de error de la celda o la fila para asegurarse de que el valor actual se muestra en el control.

Los glifos de error de celdas y filas se muestran cuando los valores de las propiedades ShowCellErrors y ShowRowErrors son true.
CellContextMenuStripNeeded

RowContextMenuStripNeeded
Usado por el control para recuperar una celda o fila ContextMenuStrip cuando la propiedad DataSource del control está establecida o la propiedad VirtualMode es true.
RowHeightInfoNeeded

RowHeightInfoPushed
Usado por el control para recuperar o almacenar información de alto de fila en la memoria caché de datos. Llame al método UpdateRowHeightInfo cuando cambie la información de la altura de la fila almacenada en caché fuera de un controlador de eventos RowHeightInfoPushed para asegurarse de que el valor actual se utiliza en la presentación del control.

Procedimientos recomendados en modo virtual

Si va a implementar el modo virtual para trabajar de forma eficaz con grandes cantidades de datos, también querrá asegurarse de que está trabajando de forma eficaz con el propio control DataGridView. Para obtener más información sobre el uso eficaz de los estilos de celda, el ajuste automático de tamaño, las selecciones y el uso compartido de filas, vea Procedimientos recomendados para ajustar la escala del control DataGridView en formularios Windows Forms.

Vea también