Práticas recomendadas para escala o controle DataGridView do Windows Forms

The DataGridView controle foi projetado para fornecer escalabilidade máxima. Se você precisar exibir grandes quantidades de dados, você deve seguir as diretrizes descritas neste tópico para evitar isso consuma uma grande quantidade de memória ou comprometer a capacidade de resposta da interface do usuário (UI).Este tópico discute os seguintes problemas:

  • Usando estilos de célula de maneira eficiente

  • Usando menus de atalho com eficiência

  • Usando o redimensionamento automático com eficiência

  • Usando as coleções de células, linhas e colunas selecionadas com eficiência

  • Usando linhas compartilhadas

  • Impedindo a linhas se tornando descompartilhado

Se você tiver necessidades especiais de desempenho, você pode implementar o modo virtual e fornecer suas próprias operações de gerenciamento de dados.Para obter mais informações, consulte Modos de exibição de dados no controle DataGridView do Windows Forms.

Usando estilos de célula com eficiência

Cada célula, linha e coluna podem ter suas próprias informações de estilo.Informações de estilo são armazenadas em DataGridViewCellStyle objetos. Criando objetos de estilo para muitos individuais de célulaDataGridView elementos podem ser ineficientes, especialmente quando se trabalha com grandes quantidades de dados. Para evitar um impacto no desempenho, use as diretrizes a seguir:

Usando menus de atalho com eficiência

Cada célula, linha e coluna podem ter seu próprio menu de atalho.Menus de atalho no DataGridView controle são representados por ContextMenuStrip controles. Assim sistema autônomo com objetos de estilo de célula, Criando menus de atalho para muitos individuais DataGridView elementos serão afetam negativamente a velocidade. Para evitar essa penalidade, use as diretrizes a seguir:

  • Evite criar menus de atalho para células individuais e linhas.Isso inclui o modelo de linha, que é clonado junto com seu menu de atalho quando novas linhas são adicionadas ao controle.Para máxima escalabilidade, use apenas ContextMenuStrip propriedade para especificar um menu de atalho único para todo o controle.

  • Se você precisar de vários menus de atalho para várias linhas ou células, lidar com o CellContextMenuStripNeeded ou RowContextMenuStripNeeded eventos. Esses eventos permitem que você gerenciar os objetos do menu de atalho sozinho, permitindo que você ajuste o desempenho.

Usando o redimensionamento automático com eficiência

Linhas, colunas e cabeçalhos podem ser automaticamente redimensionados sistema autônomo alterações de Sumário da célula para que todo o Sumário de células é exibido sem corte.Alterando modos de dimensionamento também pode redimensionar linhas, colunas e cabeçalhos.Para determinar o dimensionar correto, a DataGridView controle deve examinar o valor de cada célula deve acomodar. Ao trabalhar com grandes conjuntos de dados, essa análise negativamente pode afetar o desempenho do controle quando o redimensionamento automático ocorre.Para evitar penalidades de desempenho, use as diretrizes a seguir:

Para obter mais informações, consulte Opções no Windows Forms DataGridView controle de dimensionamento.

Usando as células selecionadas, linhas e colunas coleções com eficiência

The SelectedCells coleção não executa com eficiência grandes seleções. The SelectedRows e SelectedColumns coleções também podem ser ineficientes, embora em menor grau porque há muitos menos linhas de células em uma típica DataGridView controle e muito menos colunas que linhas. Para evitar penalidades de desempenho ao trabalhar com essas coleções, use as diretrizes a seguir:

Usando linhas compartilhados

Uso eficiente de memória é alcançado no DataGridView o controle por meio compartilhado linhas. Linhas irão compartilhar o máximo de informações sobre sua aparência e comportamento possível compartilhando instâncias do DataGridViewRow classe.

Enquanto o compartilhamento de instâncias de linha salva memória, linhas podem com com facilidade se tornar não compartilhadas.Por exemplo, sempre que um usuário interage diretamente com uma célula, se sua linha torna não compartilhada.Porque isso não pode ser evitado, as diretrizes neste tópico são úteis somente quando estiver trabalhando com grandes quantidades de dados e somente quando os usuários irão interagir com uma parte dos dados relativamente pequena toda vez que o programa é executado.

Uma linha não pode ser compartilhada em um não acoplado DataGridView controle se qualquer uma das suas células contiverem valores. Quando o DataGridView controle é limite a uma fonte de dados externa ou ao implementar o modo virtual e fornecer sua própria fonte de dados, os valores das células são armazenados fora do controle em vez de em objetos de célula, permitindo que as linhas a ser compartilhada.

Um objeto de linha só pode ser compartilhado, se o estado de todas as suas células pode ser determinado de estado de linha e os estados de colunas que contêm as células.Se você alterar o estado de uma célula para que não pode ser deduzido do estado da sua linha e coluna, a linha não pode ser compartilhada.

Por exemplo, uma linha não pode ser compartilhada em qualquer uma das seguintes situações:

No modo limite ou modo virtual, você pode fornecer menus de dicas de ferramenta e atalho para células individuais, manipulando o CellToolTipTextNeeded e CellContextMenuStripNeeded eventos.

The DataGridView controle tentará automaticamente utilizar linhas compartilhadas sempre que linhas são adicionadas à DataGridViewRowCollection. Use as diretrizes a seguir para garantir que as linhas são compartilhadas:

Para determinar se uma linha é compartilhada, use o DataGridViewRowCollection.SharedRow método para recuperar o objeto de linha e, em seguida, verifique o objeto Index propriedade. Linhas compartilhadas sempre têm um Index valor da propriedade de – 1.

Impedindo a linhas se tornar descompartilhado

Linhas compartilhadas podem se tornar não compartilhadas sistema autônomo resultado de ação do usuário ou código.Para evitar um impacto no desempenho, você deve evitar fazendo com que linhas para se tornar não compartilhado.Durante o desenvolvimento de aplicativos, você pode manipular o RowUnshared evento para determinar quando linhas são descompartilhadas. Isso é útil ao depurar problemas de compartilhamento de linha.

Para impedir linhas se tornando descompartilhado, use as diretrizes a seguir:

  • Evitar a indexação de Rows coleção ou iterar através dela com um foreach loop. Não será necessário normalmente para acesso linhas diretamente.DataGridView métodos que operam em linhas ter argumentos de índice de linha em vez de instâncias de linha. Além disso, os manipuladores para eventos relacionados à linha receber objetos de argumento de evento com propriedades de linha que você pode usar para manipular linhas sem fazer com que eles se tornem não compartilhado.

  • Se você precisar acesso uma linha de objeto, use o DataGridViewRowCollection.SharedRow método e passe índice real da linha. Observe, entretanto, modificando um objeto de linha compartilhada recuperado por meio desse método que irá modificar todas as linhas que compartilham este objeto.A linha para novos registros não é compartilhada com outras linhas, no entanto, para que ele não será afetado quando você modifica qualquer Outros linha.Observe também que linhas diferentes, representadas por uma linha compartilhada podem ter menus de atalho diferente.Para recuperar o menu de atalho correto da instância de uma linha compartilhada, use o GetContextMenuStrip método e passe índice real da linha. Se você acesso ContextMenuStrip propriedade em vez disso, ele usará o índice da linha compartilhada-1 e não recuperará o menu de atalho correto.

  • Evitar a indexação de DataGridViewRow.Cells coleção. Acessar diretamente uma célula fará com que sua linha pai para se tornar não compartilhado, instanciar um novo DataGridViewRow. Manipuladores para eventos relacionados à célula recebem objetos de argumento de evento com propriedades de célula que você pode usar para manipular as células sem causar linhas para se tornar não compartilhado.Você também pode usar o CurrentCellAddress propriedade para recuperar os índices de linha e coluna da célula corrente sem acessar diretamente na célula.

  • Evite modos de seleção baseada em célula.Esses modos de fazer com que linhas para se tornar não compartilhado.Em vez disso, conjunto o DataGridView.SelectionMode propriedade para DataGridViewSelectionMode.FullRowSelect ou DataGridViewSelectionMode.FullColumnSelect.

  • Não manipulam o DataGridViewRowCollection.CollectionChanged ou DataGridView.RowStateChanged eventos. Esses eventos fazem com que linhas para se tornar não compartilhado.Além disso, não telefonar o DataGridViewRowCollection.OnCollectionChanged ou DataGridView.OnRowStateChanged métodos disparam esses eventos.

  • Não acesso o DataGridView.SelectedCells coleção quando o DataGridView.SelectionMode valor da propriedade é FullColumnSelect, ColumnHeaderSelect, FullRowSelect, ou RowHeaderSelect. Isso faz com que todas as linhas selecionadas para se tornar não compartilhado.

  • Não telefonar o DataGridView.AreAllCellsSelected método. Esse método pode fazer com que linhas para se tornar não compartilhado.

  • Não telefonar o DataGridView.SelectAll método quando o DataGridView.SelectionMode valor da propriedade é CellSelect. Isso faz com que todas as linhas para se tornar não compartilhado.

  • Não defina o ReadOnly ou Selected propriedade de uma célula para false Quando a propriedade correspondente na sua coluna é definida true. Isso faz com que todas as linhas para se tornar não compartilhado.

  • Não acesse o DataGridViewRowCollection.List propriedade. Isso faz com que todas as linhas para se tornar não compartilhado.

  • Não chame o Sort(IComparer) sobrecarga da Sort método. Classificação com um comparador personalizado faz com que todas as linhas para se tornar não compartilhado.

Consulte também

Tarefas

Como: conjunto estilos de célula padrão para o Windows Forms DataGridView controle

Conceitos

Modo virtual no Windows Forms DataGridView controle

Modos de exibição de dados no controle DataGridView do Windows Forms

Estilos de célula no Windows Forms DataGridView controle

Opções no Windows Forms DataGridView controle de dimensionamento

Referência

DataGridView

Outros recursos

Desempenho ajuste in Windows Forms DataGridView controle