Share via


Modo virtual no controle DataGridView dos 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 VirtualMode propriedade e true manipule um ou mais dos eventos descritos neste tópico. Você normalmente manipulará pelo menos o evento CellValueNeeded, que permite os valores de consulta do controle no cache de dados.

Modo associado e modo virtual

O modo virtual é necessário somente quando você precisar suplementar ou substituir o modo associado. No modo acoplado, você define a DataSource propriedade e o controle carrega automaticamente os dados da fonte especificada e envia as alterações do usuário de volta para ele. Você pode controlar quais colunas associadas são exibidas e a fonte de dados que geralmente 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. Isso, às vezes, é chamado de "modo misto" e é útil para exibir coisas como controles de interface do usuário ou valores calculados.

Como as colunas não associadas estão fora da fonte de dados, elas são ignoradas por 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 acoplados em um cache local e implementar o modo virtual para permitir que o controle interaja DataGridView com ele.

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

Substituindo o modo associado

Se o modo associado não atender às suas necessidades de desempenho, você poderá gerenciar todos os seus dados em um cache personalizado por meio de manipuladores de eventos de modo virtual. Por exemplo, você pode usar o modo virtual para implementar um mecanismo de carregamento de dados Just-In-Time que recupera apenas os dados necessários de um banco de dados para 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 Implementando o modo virtual com o carregamento de dados Just-In-Time no controle DataGridView dos Windows Forms.

Eventos de modo virtual

Se seus dados são somente leitura, o evento CellValueNeeded pode ser o único com o qual você precisará lidar. Eventos adicionais de modo virtual permitem que você habilite uma funcionalidade específica como edições do usuário, adição de linha e exclusão e transações de nível de linha.

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

Para mais informações sobre como implementar o modo virtual para gerenciar os dados de leitura/gravação com um escopo de confirmação de 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 com um escopo de confirmação em nível de célula, consulte o tópico de referência de VirtualMode propriedade.

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

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

Chame o método ao alterar um valor armazenado em cache fora de um CellValuePushed manipulador de eventos para garantir que o UpdateCellValue valor atual seja exibido no controle e para aplicar quaisquer modos de dimensionamento automático 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 VirtualMode configuração da propriedade.

Eventos Descrição
UserDeletingRow

UserDeletedRow

RowsRemoved

RowsAdded
Usado pelo controle para indicar quando as linhas são excluídas ou adicionadas, permitindo a atualização do cache de dados adequadamente.
CellFormatting

CellParsing

CellValidating

CellValidated

RowValidating

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

As Dicas de Ferramentas de Célula são exibidas somente quando o valor da ShowCellToolTips propriedade é true.
CellErrorTextNeeded

RowErrorTextNeeded
Usado pelo controle para recuperar texto de erro de célula ou linha quando a propriedade é definida ou a DataSourceVirtualMode propriedade é true.

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

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

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

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

Melhores práticas para o modo virtual

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

Confira também