Partilhar via


Modo virtual no controle DataGridView do Windows Forms

Com o modo virtual, você pode gerenciar a interação entre o controle de DataGridView e um cache de dados personalizado. Para implementar o modo virtual, defina a propriedade VirtualMode como true e manipular um ou mais dos eventos descritos neste tópico. Normalmente, manipularás pelo menos o evento CellValueNeeded, o que permite a consulta de valores de controlo na cache de dados.

Modo Ligado e Modo Virtual

O modo virtual é necessário apenas quando você precisa complementar ou substituir o modo acoplado. No modo vinculado, define-se a propriedade DataSource e o controlo carrega automaticamente os dados da fonte especificada e submete as alterações do utilizador de volta à mesma. Você pode controlar quais das colunas vinculadas são exibidas, e a própria fonte de dados normalmente lida com operações como classificação.

Complementando o modo vinculado

Você pode complementar o modo acoplado exibindo colunas não acopladas junto com as colunas acopladas. Isso às vezes é chamado de "modo misto" e é útil para exibir coisas como valores calculados ou controles de interface do usuário (UI).

Como as colunas não acopladas 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 acoplados em um cache local e implementar o modo virtual para permitir que o controle DataGridView interaja com ele.

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

Substituindo o Modo Vinculado

Se o modo acoplado 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 a quantidade de dados de um banco de dados em rede necessária para um desempenho ideal. Este cenário é particularmente útil quando se trabalha com grandes quantidades de dados através de uma ligação de rede lenta ou com máquinas cliente que têm uma quantidade limitada de RAM ou espaço de armazenamento.

Para obter mais informações sobre como utilizar o modo virtual num cenário just-in-time, consulte Implementação do modo virtual com carregamento de dados just-In-Time no controlo DataGridView do Windows Forms.

Virtual-Mode Eventos

Se os seus dados forem apenas de leitura, o evento CellValueNeeded pode ser o único evento que precisará gerir. Eventos de modo virtual adicionais permitem habilitar funcionalidades específicas, como edições de usuário, adição e exclusão de linhas e transações em nível de linha.

Alguns eventos DataGridView padrão (como eventos que ocorrem quando os usuários adicionam ou excluem linhas ou quando os valores das células são editados, analisados, validados ou formatados) também são úteis no modo virtual. Você também pode manipular eventos que permitem manter valores que normalmente não são armazenados numa fonte de dados vinculada, como texto de dica 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 de 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 do Windows Forms.

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

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

Evento Descrição
CellValueNeeded Usado pelo controle para recuperar um valor de célula do cache de dados para exibição. Este evento ocorre apenas para células em colunas não acopladas.
CellValuePushed Usado pelo controle para confirmar a entrada do utilizador de uma célula para o cache de dados. Este evento ocorre apenas para células em colunas não acopladas.

Chame o método UpdateCellValue ao alterar um valor armazenado em cache fora de um manipulador de eventos CellValuePushed para garantir que o 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 reverter 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 propriedade VirtualMode.

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 de acordo.
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 DataSource é definida ou a propriedade VirtualMode é true.

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

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

Chame o método UpdateCellErrorText ou o método UpdateRowErrorText quando você alterar o texto de erro de célula ou 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 controlo para recuperar uma célula ou linha ContextMenuStrip quando a propriedade DataSource do controlo é definida ou a propriedade VirtualMode é true.
RowHeightInfoNeeded

RowHeightInfoPushed
Usado pelo controle para recuperar ou armazenar informações de altura de linha no cache de dados. Chame o método UpdateRowHeightInfo ao alterar as informações de altura da linha em cache fora de um manipulador de eventos RowHeightInfoPushed 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 desejará garantir que está trabalhando de forma eficiente com o próprio controle DataGridView. Para obter mais informações sobre o uso eficiente de estilos de célula, dimensionamento automático, seleções e compartilhamento de linhas, consulte práticas recomendadas para dimensionar o controle DataGridView do Windows Forms.

Ver também