Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original
Este tópico ainda não foi avaliado como - Avalie este tópico

As práticas recomendadas para escala o controle DataGridView do Windows Forms

O 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 consumindo grandes quantidades de memória ou afetar a capacidade de resposta da interface do usuário (UI). Este tópico discute os seguintes problemas:

  • Usando estilos de célula com eficiência

  • 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 que linhas se tornando descompartilhados.

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 Exibir de dados no Controlarar Exibir em Grade de Dados do Windows Forms.

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 de célula para muitos indivíduo DataGridView elementos podem ser ineficientes, especialmente quando se trabalha com grandes quantidades de dados. Para evitar um impacto no desempenho, use as seguintes diretrizes:

Cada célula, linha e coluna podem ter seu próprio menu de atalho. Menus de atalho do DataGridView controle são representados por ContextMenuStrip controles. Assim como acontece com objetos de estilo de célula, a criação de menus de atalho para o indivíduo muitas DataGridView elementos afetará negativamente o desempenho. Para evitar essa penalidade, use as seguintes diretrizes:

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

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

Linhas, colunas e cabeçalhos podem ser automaticamente redimensionados como alterações de conteúdo da célula para que todo o conteúdo das células é exibido sem corte. Alterando modos de dimensionamento também pode redimensionar linhas, colunas e cabeçalhos. Para determinar o tamanho correto, o DataGridView controle deve examinar o valor de cada célula que ele deve acomodar. Ao trabalhar com grandes conjuntos de dados, essa análise pode impacto negativo no desempenho do controle quando o redimensionamento automático ocorre. Para evitar penalidades de desempenho, use as seguintes diretrizes:

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

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

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

Enquanto compartilhamento linha instâncias salva memória, linhas podem facilmente se tornar não compartilhadas. Por exemplo, sempre que um usuário interage diretamente com uma célula, a sua linha fica 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 relativamente pequena de dados cada vez que o programa é executado.

Uma linha não pode ser compartilhada em um não acoplado DataGridView controlar se qualquer uma das suas células contiverem valores. Quando o DataGridView controle está vinculado a uma fonte de dados externos ou quando você implementa modo virtual e fornece sua própria fonte de dados, os valores de célula são armazenados fora do controle, em vez de 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 a partir do estado da linha e os estados das colunas que contêm as células. Se você alterar o estado de uma célula para que ela não pode ser deduzida do estado de 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 acoplado ou virtual, você pode fornecer dicas de ferramentas, menus de atalho para células individuais, tratamento de CellToolTipTextNeeded e CellContextMenuStripNeeded eventos.

O DataGridView controle automaticamente tentará usar linhas compartilhadas, sempre que as linhas são adicionadas à DataGridViewRowCollection. Use as seguintes diretrizes 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 tem um Index valor da propriedade de – 1.

Linhas compartilhadas podem se tornar não compartilhadas como resultado de uma ação do usuário ou código. Para evitar um impacto no desempenho, você deve evitar causando linhas para se tornar não compartilhado. Durante o desenvolvimento de aplicativo, você pode manipular o RowUnshared evento para determinar quando linhas tornam-se não compartilhadas. Isso é útil ao depurar problemas de compartilhamento de linha.

Para impedir que linhas se tornando descompartilhado, use as seguintes diretrizes:

  • Evitar a indexação de Rows coleção ou iterar através dele com um foreach loop. Você não normalmente precisarão acessar linhas diretamente. DataGridView métodos que operam em linhas levar argumentos de índice de linha em vez de instâncias de linha. Além disso, os manipuladores para eventos relacionados a linha exibida objetos de argumento de evento com propriedades de linha que você pode usar para manipular linhas sem fazendo com que eles se tornem não compartilhado.

  • Se você precisar acessar um objeto de linha, use o DataGridViewRowCollection.SharedRow método e passar a índice real da linha. Observe, Entretanto, modificando um objeto de linha compartilhada recuperado através deste método 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 outra linha. Observe também que linhas diferentes, representadas por uma linha compartilhada podem ter menus de atalho diferente. Para recuperar o menu de atalho correta de uma instância de linha compartilhada, use o GetContextMenuStrip método e passar a índice real da linha. Se você acessar a linha compartilhada ContextMenuStrip propriedade em vez disso, ele usará o índice de linha compartilhada de -1 e não recuperará o menu de atalho correto.

  • Evitar a indexação de DataGridViewRow.Cells coleção. Acessando uma célula diretamente fará com que sua linha pai para se tornar não compartilhado, instanciar uma nova DataGridViewRow. Manipuladores de eventos relacionados à célula recebem os objetos de argumento de evento com propriedades da 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 atual sem acessar a célula diretamente.

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

  • Não tratam o DataGridViewRowCollection.CollectionChanged ou DataGridView.RowStateChanged eventos. Esses eventos causam linhas para se tornar não compartilhado. Além disso, não chame o DataGridViewRowCollection.OnCollectionChanged ou DataGridView.OnRowStateChanged os métodos que elevar esses eventos.

  • Do not access the DataGridView.SelectedCells collection when the DataGridView.SelectionMode property value is FullColumnSelect, ColumnHeaderSelect, FullRowSelect, or RowHeaderSelect. Isso faz com que todas as linhas selecionadas para se tornar não compartilhado.

  • Não chame o DataGridView.AreAllCellsSelected método. Esse método pode causar linhas para se tornar não compartilhado.

  • Não chame 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 a ReadOnly ou Selected a propriedade de uma célula para false quando a propriedade correspondente na sua coluna é definida como 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) de sobrecarga da Sort método. Classificação com um comparador personalizado faz com que todas as linhas para se tornar não compartilhado.

Isso foi útil para você?
(1500 caracteres restantes)

Contribuições da comunidade

ADICIONAR
© 2013 Microsoft. Todos os direitos reservados.