Sizing Options in the Windows Forms DataGridView Control (Opções de dimensionamento no controle DataGridView dos Windows Forms)

DataGridView Linhas, colunas e cabeçalhos podem mudar de tamanho como resultado de muitas ocorrências diferentes. A tabela a seguir mostra essas ocorrências.

Ocorrência Descrição
Redimensionamento do usuário Os usuários podem fazer ajustes de tamanho arrastando ou clicando duas vezes nos divisores de linha, coluna ou cabeçalho.
Redimensionamento do controle No modo de preenchimento de coluna, as larguras de coluna são alteradas quando a largura do controle é alterada. Por exemplo, quando o controle é encaixado em seu formulário pai e o usuário redimensiona o formulário.
Alteração do valor da célula Nos modos de dimensionamento automático baseado em conteúdo, os tamanhos são alterados para ajustar os novos valores de exibição.
Chamada de método O redimensionamento programático baseado em conteúdo permite que você faça ajustes de tamanho oportunos com base nos valores de célula no momento da chamada de método.
Configuração de propriedade Você também pode definir valores específicos de largura e altura.

Por padrão, o redimensionamento do usuário está habilitado, o dimensionamento automático está desabilitado e os valores de células são mais largos do que o recorte de suas colunas.

A tabela a seguir mostra cenários que você pode usar para ajustar o comportamento padrão ou para usar opções específicas de dimensionamento para atingir efeitos específicos.

Cenário Implementação
Use o modo de preenchimento de coluna para exibir dados de tamanhos semelhantes em um número relativamente pequeno de colunas que ocupem toda a largura do controle sem exibir a barra de rolagem horizontal. Defina a propriedade AutoSizeColumnsMode como Fill.
Use o modo de preenchimento de coluna com valores de exibição de tamanhos variados. Defina a propriedade AutoSizeColumnsMode como Fill. Inicialize larguras de coluna relativas definindo as propriedades da coluna FillWeight ou chamando o método de controle depois de preencher o controle AutoResizeColumns com dados.
Use o modo de preenchimento de coluna com valores de importância variada. Defina a propriedade AutoSizeColumnsMode como Fill. Defina valores grandes MinimumWidth para colunas que sempre devem exibir alguns de seus dados ou use uma opção de dimensionamento diferente do modo de preenchimento para colunas específicas.
Use o modo de preenchimento de coluna para evitar a exibição da tela de fundo do controle. Defina a AutoSizeMode propriedade da última coluna e Fill use outras opções de dimensionamento para as outras colunas. Se as outras colunas usarem muito espaço disponível, defina a MinimumWidth propriedade da última coluna.
Exiba uma coluna de largura fixa, como um ícone ou uma coluna de ID. Defina AutoSizeMode como None e Resizable para False a coluna. Inicialize sua largura definindo a Width propriedade ou chamando o método de controle depois de preencher o controle AutoResizeColumn com dados.
Ajuste os tamanhos automaticamente sempre que o conteúdo da célula for alterado para evitar recorte e otimizar o uso de espaço. Defina uma propriedade de dimensionamento automático para um valor que represente um modo de dimensionamento baseado em conteúdo. Para evitar uma penalidade de desempenho ao trabalhar com grandes quantidades de dados, use um modo de dimensionamento que calcule apenas as linhas exibidas.
Ajuste os tamanhos para ajustar os valores nas linhas exibidas para evitar penalidades de desempenho ao trabalhar com várias linhas. Use os valores de enumeração de modo de dimensionamento apropriados com o redimensionamento automático ou programático. Para ajustar tamanhos para ajustar valores em linhas recém-exibidas durante a rolagem, chame um método de redimensionamento em um Scroll manipulador de eventos. Para personalizar o redimensionamento do usuário clique duas vezes para que somente os valores nas linhas exibidas determinem os novos tamanhos, chame um método de redimensionamento em um manipulador de RowDividerDoubleClick eventos ou ColumnDividerDoubleClick .
Ajuste os tamanhos para ajustar o conteúdo da célula apenas em momentos específicos para evitar penalidades de desempenho ou permitir o redimensionamento do usuário. Chame um método de redimensionamento baseado em conteúdo em um manipulador de eventos. Por exemplo, use o evento para inicializar tamanhos após a vinculação e manipule o DataBindingCompleteCellValidated evento or CellValueChanged para ajustar tamanhos para compensar edições ou alterações do usuário em uma fonte de dados associada.
Ajuste as alturas de linhas para conteúdo de célula multilinha. Verifique se as larguras de coluna são apropriadas para a exibição de parágrafos de texto e use o dimensionamento de linhas baseado em conteúdo automático ou programático para ajustar as alturas. Verifique também se as células com conteúdo de várias linhas são exibidas usando um WrapMode valor de estilo de célula de True.

Normalmente, você usará o modo de dimensionamento automático de coluna para manter as larguras de coluna ou defini-las como larguras específicas antes que as alturas das linhas sejam ajustadas.

Redimensionando com o mouse

Por padrão, os usuários podem redimensionar linhas, colunas e cabeçalhos que não usam um modo de dimensionamento automático com base nos valores de célula. Para impedir que os usuários redimensionem com outros modos, como o modo de preenchimento de coluna, defina uma ou mais das seguintes DataGridView propriedades:

Você também pode impedir que os usuários redimensionem linhas ou colunas individuais definindo suas Resizable propriedades. Por padrão, o valor da propriedade é baseado no valor da propriedade para colunas e no valor da ResizableAllowUserToResizeColumnsAllowUserToResizeRows propriedade para linhas. No entanto, se você definir Resizable explicitamente como True ou , o valor especificado substituirá o valor de controle será para essa linha ou Falsecoluna. Definido Resizable como NotSet para restaurar a herança.

Como NotSet restaura a herança de valor, a propriedade nunca retornará um valor, a menos que a linha ou coluna não tenha sido adicionada a Resizable um NotSetDataGridView controle. Se você precisar determinar se o Resizable valor da propriedade de uma linha ou coluna é herdado, examine sua State propriedade. Se o valor incluir o sinalizador, o StateResizableSet valor da Resizable propriedade não será herdado.

Dimensionamento automático

Há dois tipos de dimensionamento automático no controle: modo de preenchimento de coluna e dimensionamento automático baseado em DataGridView conteúdo.

O modo de preenchimento de coluna faz com que as colunas visíveis no controle preencham a largura da área de exibição do controle. Para obter mais informações sobre esse modo, consulte Modo de preenchimento da coluna no controle DataGridView dos Windows Forms.

Você também pode configurar as linhas, as colunas e os cabeçalhos para ajustar automaticamente seus tamanhos a fim de ajustar o conteúdo de suas células. Nesse caso, o ajuste de tamanho ocorre sempre que o conteúdo da célula é alterado.

Observação

Se você mantiver valores de célula em um cache de dados personalizado usando o modo virtual, o dimensionamento automático ocorrerá quando o usuário editar um valor de célula, mas não ocorrerá quando você alterar um valor armazenado em cache fora de um CellValuePushed manipulador de eventos. Nesse caso, chame o método para forçar o UpdateCellValue controle a atualizar a exibição da célula e aplicar os modos de dimensionamento automático atuais.

Se o dimensionamento automático baseado em conteúdo estiver habilitado apenas para uma dimensão, ou seja, para linhas, mas não colunas, ou para colunas, mas não linhas, e WrapMode também estiver habilitado, o ajuste de tamanho também ocorrerá sempre que a outra dimensão for alterada. Por exemplo, se linhas, mas não colunas, estiverem configuradas para dimensionamento automático e estiverem habilitadas, os usuários poderão arrastar divisores de coluna para alterar a largura de uma coluna e WrapMode as alturas das linhas serão ajustadas automaticamente para que o conteúdo da célula ainda seja totalmente exibido.

Se você configurar linhas e colunas para dimensionamento automático baseado em conteúdo e estiver habilitado, o controle ajustará os tamanhos sempre que o DataGridView conteúdo da célula for alterado e WrapMode usará uma proporção ideal de altura/largura da célula ao calcular novos tamanhos.

Para configurar o modo de dimensionamento para cabeçalhos e linhas e para colunas que não substituem o valor de controle, defina uma ou mais das seguintes DataGridView propriedades:

Para substituir o modo de dimensionamento de coluna do controle para uma coluna individual, defina sua AutoSizeMode propriedade como um valor diferente de NotSet. O modo de dimensionamento de uma coluna é, na verdade, determinado por sua InheritedAutoSizeMode propriedade. O valor dessa propriedade é baseado no valor da propriedade da coluna, AutoSizeMode a menos que esse valor seja NotSet, caso em que o valor do AutoSizeColumnsMode controle é herdado.

Use o redimensionamento automático baseado em conteúdo com cuidado ao trabalhar com grandes quantidades de dados. Para evitar penalidades de desempenho, use os modos de dimensionamento automático que calculam tamanhos base apenas nas linhas exibidas em vez de analisar cada linha no controle. Para obter o desempenho máximo, use o redimensionamento programático para que você possa redimensionar em momentos específicos, como imediatamente depois que novos dados são carregados.

Os modos de dimensionamento automático baseados em conteúdo não afetam linhas, colunas ou cabeçalhos ocultos definindo a propriedade de linha ou coluna Visible ou o controle RowHeadersVisible ou ColumnHeadersVisible propriedades como false. Por exemplo, se uma coluna for ocultada depois de ser dimensionada automaticamente para ajustar um valor de célula grande, a coluna oculta não mudará seu tamanho se a linha que contém o valor da célula grande for excluída. O dimensionamento automático não ocorre quando a visibilidade é alterada, portanto, alterar a propriedade column Visible de volta para true não a forçará a recalcular seu tamanho com base em seu conteúdo atual.

O redimensionamento programático baseado em conteúdo afeta colunas, linhas e cabeçalhos independentemente da visibilidade.

Redimensionamento programático

Quando o dimensionamento automático está desabilitado, você pode definir programaticamente a largura ou a altura exata de linhas, colunas ou cabeçalhos usando as propriedades a seguir:

Você também pode redimensionar de forma programática as linhas, as colunas e os cabeçalhos para que se ajustem ao conteúdo usando os seguintes métodos:

Esses métodos redimensionarão as linhas, as colunas ou os cabeçalhos uma única vez em vez de configurá-los para redimensionamento contínuo. Os novos tamanhos são calculados automaticamente para exibir todo o conteúdo da célula sem recorte. Quando você redimensiona programaticamente colunas que têm InheritedAutoSizeMode valores de propriedade de , no entanto, as larguras baseadas em conteúdo calculadas são usadas para ajustar proporcionalmente os valores de propriedade de coluna, e as larguras de coluna FillWeight reais são calculadas de acordo com essas novas proporções para que todas as colunas preencham a área de Fillexibição disponível do controle.

O redimensionando programático é útil para evitar penalidades de desempenho com o redimensionamento contínuo. Ele também é útil para fornecer os tamanhos inicias de cabeçalhos, colunas e linhas redimensionáveis pelo usuário e para o modo de preenchimento de coluna.

Normalmente, você chamará os métodos de redimensionamento programáticos em momentos específicos. Por exemplo, você pode redimensionar de forma programática todas as colunas imediatamente após o carregamento de dados ou redimensionar de forma programática uma linha específica depois que um valor de célula específico foi modificado.

Personalizando o comportamento de dimensionamento baseado em conteúdo

Você pode personalizar comportamentos de dimensionamento ao trabalhar com tipos derivados DataGridView de célula, linha e coluna substituindo os métodos , DataGridViewRow.GetPreferredHeightou DataGridViewColumn.GetPreferredWidth chamando sobrecargas de método de DataGridViewCell.GetPreferredSizeredimensionamento protegido em um controle derivadoDataGridView. As sobrecargas de método de redimensionamento protegidas são projetadas para funcionar em pares para atingir uma razão ideal de altura para largura da célula, evitando células excessivamente altas ou largas. Por exemplo, se você chamar a sobrecarga do AutoResizeRows método e passar um valor de false para o Boolean parâmetro, a AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) sobrecarga calculará as alturas e larguras ideais para as células na linha, mas ajustará apenas as alturas da linha. Em seguida, você deve chamar o método para ajustar as larguras das colunas para o AutoResizeColumns ideal calculado.

Opções de dimensionamento baseado em conteúdo

As enumerações usadas pelos métodos e propriedades de dimensionamento têm valores semelhantes para dimensionamento baseado em conteúdo. Com esses valores, você pode limitar quais células são usadas para calcular o tamanho preferencial. Para todas as enumerações de dimensionamento, valores com nomes que se referem a células exibidas limitam seus cálculos para células em linhas exibidas. Excluir linhas é útil para evitar uma penalidade de desempenho ao trabalhar com uma grande quantidade de linhas. Você também pode restringir os cálculos para valores de célula nas células de cabeçalho ou que não sejam de cabeçalho.

Confira também