Compartilhar via


Modo Virtual no controle DataGridView do Windows Forms

Com o modo virtual, você pode gerenciar a interação entre o DataGridView controle e um cache de dados personalizado. Para implementar o modo virtual, defina a propriedade VirtualMode para true e manipule um ou mais eventos descritos neste tópico. Normalmente, você lidará com pelo menos o evento CellValueNeeded, que permite que o controle procure valores no cache de dados.

Modo vinculado e modo virtual

O modo virtual é necessário somente quando você precisa complementar ou substituir o modo associado. No modo vinculado, você define a DataSource propriedade e o controle carrega automaticamente os dados da origem especificada e envia as alterações feitas pelo usuário de volta para a fonte. Você pode controlar quais das colunas associadas são exibidas e a própria fonte de dados normalmente lida com operações como classificação.

Complementando o modo associado

Você pode complementar o modo associado exibindo colunas não associadas junto com as colunas associadas. Às vezes, isso é chamado de "modo misto" e é útil para exibir itens como valores calculados ou controles de interface do usuário (interface do usuário).

Como as colunas não associadas estão fora da fonte de dados, elas são ignoradas pelas operações de classificação da fonte de dados. Portanto, ao habilitar a classificação no modo misto, você deve gerenciar os dados não associados em um cache local e implementar o modo virtual para permitir que o DataGridView controle interaja com ele.

Para obter mais informações sobre como usar o modo virtual para manter os valores em colunas não associadas, veja os exemplos nos tópicos de referência da propriedade DataGridViewCheckBoxColumn.ThreeState e da classe System.Windows.Forms.DataGridViewComboBoxColumn.

Substituindo o modo associado

Se o modo vinculado não atender às suas necessidades de desempenho, você pode gerenciar todos os seus dados em um cache personalizado utilizando manipuladores de eventos do modo virtual. Por exemplo, você pode usar o modo virtual para implementar um mecanismo de carregamento de dados just-in-time que recupera apenas o máximo de dados de um banco de dados em rede necessário para um desempenho ideal. Esse cenário é particularmente útil ao trabalhar com grandes quantidades de dados em uma conexão de rede lenta ou com computadores cliente que têm uma quantidade limitada de RAM ou espaço de armazenamento.

Para obter mais informações sobre como usar o modo virtual em um cenário just-in-time, consulte Implementing Virtual Mode with Just-In-Time Data Loading in the Windows Forms DataGridView Control.

Eventos de Virtual-Mode

Se os dados forem somente leitura, o evento CellValueNeeded talvez seja o único evento que você precisará gerenciar. Eventos adicionais de modo virtual permitem habilitar funcionalidades específicas, como edições, adição e exclusão de linhas e transações no nível de linha.

Alguns eventos padrão DataGridView (como eventos que ocorrem quando os usuários adicionam ou excluem linhas ou quando valores de célula são editados, analisados, validados ou formatados) também são úteis no modo virtual. Você também pode lidar com eventos que permitem manter valores normalmente não armazenados em uma fonte de dados associada, como texto tooltip de célula, texto de erro de célula e linha, dados de menu de atalho de célula e linha e dados de altura da linha.

Para obter mais informações sobre como implementar o modo virtual para gerenciar dados de leitura/gravação com um escopo de confirmação em nível de linha, consulte Passo a passo: implementando o modo virtual no controle DataGridView dos Windows Forms.

Para obter um exemplo que implementa o modo virtual, consulte o tópico de referência da propriedade VirtualMode com um escopo de confirmação no nível da célula.

Os eventos a seguir ocorrem somente quando a VirtualMode propriedade é definida como true.

Acontecimento Descrição
CellValueNeeded Usado pelo controle para recuperar um valor de célula do cache de dados para exibição. Esse evento ocorre apenas para células em colunas não vinculadas.
CellValuePushed Usado pelo controle para confirmar a entrada de dados do usuário de uma célula no cache. Esse evento ocorre apenas para células em colunas não vinculadas.

Chame o UpdateCellValue método ao alterar um valor armazenado em cache fora de um CellValuePushed manipulador de eventos para garantir que o valor atual seja exibido no controle e aplicar todos os modos de dimensionamento automáticos atualmente em vigor.
NewRowNeeded Usado pelo controle para indicar a necessidade de uma nova linha no cache de dados.
RowDirtyStateNeeded Usado pelo controle para determinar se uma linha tem alterações não confirmadas.
CancelRowEdit Usado pelo controle para indicar que uma linha deve ser revertida para seus valores armazenados em cache.

Os eventos a seguir são úteis no modo virtual, mas podem ser usados independentemente da configuração da VirtualMode propriedade.

Eventos Descrição
UserDeletingRow

UserDeletedRow

RowsRemoved

RowsAdded
Usado pelo controle para indicar quando as linhas são excluídas ou adicionadas, permitindo que você atualize o cache de dados adequadamente.
CellFormatting

CellParsing

CellValidating

CellValidated

RowValidating

RowValidated
Usado pelo controle para formatar valores de célula para exibição e analisar e validar a entrada do usuário.
CellToolTipTextNeeded Usado pelo controle para recuperar o texto tooltip da célula quando a DataSource propriedade é definida ou a VirtualMode propriedade é true.

As dicas de célula são exibidas somente quando o valor da propriedade ShowCellToolTips é true.
CellErrorTextNeeded

RowErrorTextNeeded
Usado pelo controle para recuperar o texto de erro de célula ou linha quando a propriedade DataSource é configurada ou a propriedade VirtualMode é true.

Chame o método UpdateCellErrorText ou o método UpdateRowErrorText quando você alterar o texto de erro da célula ou da linha para garantir que o valor atual seja exibido no controle.

Os glifos de erro de célula e linha são exibidos quando os valores das propriedades ShowCellErrors e ShowRowErrors são true.
CellContextMenuStripNeeded

RowContextMenuStripNeeded
Usado pelo controle para recuperar uma célula ou linha ContextMenuStrip quando a propriedade DataSource do controle está definida ou a propriedade VirtualMode está true.
RowHeightInfoNeeded

RowHeightInfoPushed
Usado pelo controle para recuperar ou armazenar informações sobre a altura da linha no cache de dados. Chame o UpdateRowHeightInfo método ao alterar as informações de altura da linha armazenadas em cache fora de um RowHeightInfoPushed manipulador de eventos para garantir que o valor atual seja usado na exibição do controle.

Práticas recomendadas no modo virtual

Se você estiver implementando o modo virtual para trabalhar de forma eficiente com grandes quantidades de dados, também deverá garantir que está utilizando o controle DataGridView de maneira eficiente. Para obter mais informações sobre o uso eficiente de estilos de célula, dimensionamento automático, seleções e compartilhamento de linhas, consulte As práticas recomendadas para dimensionar o controle DataGridView dos Windows Forms.

Consulte também