Compartir por


Modo virtual en el control DataGridView de los Formularios de Windows Forms

Con el modo virtual, puede administrar la interacción entre el DataGridView control y una caché de datos personalizada. Para implementar el modo virtual, establezca la propiedad VirtualMode a true y maneje uno o más de los eventos descritos en este tema. Normalmente manejará al menos el evento CellValueNeeded, permitiendo al control buscar valores en la caché de datos.

Modo enlazado y modo virtual

El modo virtual solo es necesario cuando se necesita complementar o reemplazar el modo enlazado. En el modo enlazado, se establece la DataSource propiedad y el control carga automáticamente los datos del origen especificado y devuelve los cambios realizados por el usuario al origen. Puede controlar cuáles de las columnas enlazadas se muestran y el propio origen de datos normalmente controla 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 DataGridView control interactúe con él.

Para obtener más información sobre el uso del modo virtual para mantener los valores en columnas no vinculadas, vea los ejemplos en los temas de referencia de la propiedad DataGridViewCheckBoxColumn.ThreeState y de la clase 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, consulte Implementación del modo virtual con la carga de datos Just-In-Time en el control DataGridView de formularios Windows Forms.

Eventos Virtual-Mode

Si los datos son de solo lectura, es posible que el CellValueNeeded evento sea el único evento que tendrá que 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 no almacenados normalmente 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 altura 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: Implementación del modo virtual en el control DataGridView de formularios Windows Forms.

Para obtener un ejemplo que implemente 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 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 caché de datos. Este evento solo se produce para las celdas de columnas sin enlazar.

Llame al UpdateCellValue método al cambiar un valor almacenado en caché fuera de un CellValuePushed controlador de eventos 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 Lo usa el control para determinar si una fila tiene cambios no confirmados.
CancelRowEdit Lo usa el control para indicar que una fila debe revertir a sus valores almacenados en caché.

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

Eventos Descripción
UserDeletingRow

UserDeletedRow

RowsRemoved

RowsAdded
Lo usa 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 información sobre herramientas de celda cuando la propiedad DataSource está establecida o la propiedad VirtualMode es true.

La información sobre herramientas de celda solo se muestra cuando el valor de la propiedad ShowCellToolTips es true.
CellErrorTextNeeded

RowErrorTextNeeded
Utilizado por el control para obtener el texto de error de celda o fila cuando la propiedad DataSource está configurada, o la propiedad VirtualMode es true.

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

Los glifos de error de celda y fila se muestran cuando los valores de propiedad ShowCellErrors y ShowRowErrors son true.
CellContextMenuStripNeeded

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

RowHeightInfoPushed
Usado por el control para recuperar o almacenar información de altura de fila en la caché de datos. Llame al método UpdateRowHeightInfo al cambiar la información de altura de fila almacenada en caché fuera de un controlador de eventos RowHeightInfoPushed para asegurarse de que el valor actual se utilice en la visualizació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 control DataGridView en sí mismo. Para obtener más información sobre el uso eficaz de estilos de celda, ajuste automático de tamaño, selecciones y uso compartido de filas, consulta Procedimientos recomendados para escalar el control DataGridView de formularios Windows Forms.

Consulte también